1. 程式人生 > >禁止對象之間的拷貝

禁止對象之間的拷貝

public amp const ret log blog 拷貝 var pre

如何禁止對象之間的拷貝?

將構造函數和析構函數中的任意一個設置為private,如下:

class A{
public:
    A(){};
private:
    ~A(){};
    A(const A&a){};
    A &operator=(const A&a){return a;}
};

A a;

 編譯報錯提示:Variable of type ‘A‘ has private destructor.

我們知道,如果我們不顯性的聲明拷貝構造函數和重載=,那麽編譯器會為我們提供默認的拷貝構造函數和copy assignment函數。這樣一來,對象間的拷貝就會發生,如果要禁止對象間的拷貝,那麽就要顯性的聲明,無需定義。

class A{
public:
    A(){};
    ~A(){};
    A(const A&a){};
private:
    A &operator=(const A&a){return a;}
};

A c,d;
c=d;

 編譯報錯:‘operator=‘ is a private member of ‘A‘

禁止對象之間的拷貝