天天看点

阻止拷贝构造和拷贝赋值

 如果一个类需要自己定义析构函数,往往需要自己定义拷贝构造和拷贝赋值,系统默认合成的拷贝构造和拷贝赋值知识简单的拷贝指针成员,意味着可能会造成多个指针指向同一个内存。

class A

{

private:

B* m_data;

}

A a1;

A a2(a1);

delete a2; // a1和a2同时被销毁

A a3(a1); // a3指向无效内存

解决方法一: 将拷贝构造函数和拷贝赋值函数设置为 private

class A

{

private:

A(const A& rhs);

const A& operator=(const A& rhs);

private:

B* m_data;

}

解决方法二: 将拷贝构造函数和拷贝赋值函数 = delete

class A

{

public:

A(const A& rhs)= delete;

const A& operator=(const A& rhs) = delete;

private:

B* m_data;

}