C++阻止拷贝
来源:互联网 发布:mac彩妆价格表 编辑:程序博客网 时间:2024/05/24 01:37
#include<iostream>using namespace std;class Base{public:Base(){}private://将拷贝控制成员声明为私有成员(防止用户代码调用,但友元仍可调用它们)并且不定义它们(防止友元调用),可以阻止拷贝Base(const Base&);Base& operator=(const Base&);friend void friendfun();};void func(Base b){}void friendfun(){Base v1,v2;v1=v2;}int main(){Base b1;Base b2;b2=b1;//用户代码调用私有成员,编译期errorfunc(b1);//用户代码调用私有成员,编译期errorfriendfun();//访问未定义成员,链接error}
有时需要防止拷贝,可以采用如上做法。
运行结果如下,防止了用户代码和友元对拷贝控制成员的调用
1>d:\documents\visual studio 2010\projects\test\test\main.cpp(82): error C2248: “Base::operator =”: 无法访问 private 成员(在“Base”类中声明)
1>d:\documents\visual studio 2010\projects\test\test\main.cpp(83): error C2248: “Base::Base”: 无法访问 private 成员(在“Base”类中声明)1>main.obj : error LNK2019: 无法解析的外部符号 "private: class Base & __thiscall Base::operator=(class Base const &)" (??4Base@@AAEAAV0@ABV0@@Z),该符号在函数 "void __cdecl friendfun(void)" (?friendfun@@YAXXZ) 中被引用
1>d:\documents\visual studio 2010\Projects\test\Debug\test.exe : fatal error LNK1120: 1 个无法解析的外部命令
另外,在C++11中,可以在函数的参数列表后加上=delete来防止拷贝。
#include<iostream>using namespace std;class Base{public:Base(){}private:Base(Base&)=delete;Base& operator=(Base&)=delete;friend void friendfunc();};void friendfunc(){Base v1,v2;v1=v2;}void func(Base){}int main(){Base d1,d2;d1=d2;//errorfunc(d1);//errorfriendfunc();//error}
0 0
- 阻止拷贝
- 阻止拷贝
- C++阻止拷贝
- C++11新标准的阻止拷贝方案
- 阻止拷贝的三种方式
- C拷贝
- C/C++:拷贝文件
- Effective C++ Item6 如何阻止对象拷贝函数?
- [C#]全屏拷贝代码
- C语言文件拷贝
- 【C++】拷贝构造函数
- 拷贝文件(c)
- Objective-c 深浅拷贝
- c文件拷贝
- C++:拷贝构造函数
- C语言字符串拷贝
- c++"拷贝构造函数
- Object-c 浅拷贝
- IL指令详细
- [Hearthstone]梦想战
- Android中网络请求放在子线程中问题
- iOS UI 12 block传值
- Struts2框架学习之五:通用标签详解
- C++阻止拷贝
- 第九周项目1-猴子选大王(数组版)
- 对国货失去信心
- java资源定位(非web项目)
- redis安装与java api jedis
- 将博客搬至CSDN
- 新建用户和用户组的shell
- Codevs_P1021 玛丽卡(Dijkstra)
- AngularJS实战(七)