如何禁用拷贝构造函数和禁用重载赋值运算符
2016-11-23 15:43
495 查看
自定义了一个类,当你觉得不需要系统默认的拷贝构造函数以及重载赋值运算符时,你需要手动禁用这些。
如果类的成员中有指针的话,浅拷贝方式的结果是两个不同对象的指针指向同一块内存区域,容易出现访问冲突,多次delete等错误,不是我们所希望的。
禁止拷贝/赋值
将拷贝构造函数和重载赋值运算符设为private来禁止拷贝
#define DISABLE_COPY(Class) \
Class(const Class &); \
Class &operator=(const Class &)
class Widget
{
public:
int* pi;
private:
DISABLE_COPY(Widget);
};
===============
如果类的成员中有指针的话,浅拷贝方式的结果是两个不同对象的指针指向同一块内存区域,容易出现访问冲突,多次delete等错误,不是我们所希望的。
禁止拷贝/赋值
将拷贝构造函数和重载赋值运算符设为private来禁止拷贝
#define DISABLE_COPY(Class) \
Class(const Class &); \
Class &operator=(const Class &)
class Widget
{
public:
int* pi;
private:
DISABLE_COPY(Widget);
};
===============
相关文章推荐
- 如何不允许调用对象的拷贝构造函数和赋值运算符
- C++构造函数、拷贝构造函数、赋值运算符重载 调用时机 GCC与VC在对象作为返回值的不同处理
- 重载赋值运算符与拷贝构造函数的区别
- 1、C++关于拷贝构造函数和赋值运算符重载问题的测试程序。因为调用顺序不清,导致内存泄漏new delete
- 20170825_string构造函数、析构函数、拷贝构造函数以及重载赋值运算符
- c/c++ 构造函数、拷贝构造函数、析构函数和赋值运算符重载
- [C++基础]046_拷贝构造函数与重载赋值运算符(精深版解释)
- c++拷贝构造函数、赋值运算符=重载、深拷贝与浅拷贝
- 类的赋值运算符重载和拷贝构造函数
- [ZZ]重载赋值运算符与拷贝构造函数的区别
- 源码1 禁用拷贝构造函数 重载=运算符,以禁用=赋值 字符串拆分
- 拷贝构造函数和赋值运算符的重载的调用次数问题
- 如何: 在Windows2000中动态禁用/启用Ctrl-Alt-Delete
- 如何在vb.net中实现对类变量的重载
- 关于拷贝构造函数和赋值运算符
- win2000怎么实现自动登录,又如何禁用?
- 如何在 Internet Explorer 中禁用和使用 ADODB.Stream 对象
- 如何实现JS函数的重载
- 如何绕过客户化重载方法返回原始定义的方法(AtClass)
- 如何在 Internet Explorer 中禁用 ADODB.Stream 对象