天天看點

阻止拷貝構造和拷貝指派

 如果一個類需要自己定義析構函數,往往需要自己定義拷貝構造和拷貝指派,系統預設合成的拷貝構造和拷貝指派知識簡單的拷貝指針成員,意味着可能會造成多個指針指向同一個記憶體。

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;

}