我在開源庫中編程,在代碼中只有很少的註釋,並且絕對沒有代碼相關的文檔,或者顯示完全沒有或完全混淆的註釋。一個例子類的庫有時被定義如下(這是一個抽象簡單的例子):私人拷貝構造函數:disallow
class A
{
private:
// Disallow default bitwise copy construct.
A (const A& Acopy) { data = Acopy.data; };
int data;
public:
A() {};
A (int arg) : data(arg) {};
A(const A& Acopy) { data = Acopy.data; };
};
在私人拷貝構造函數的前「Dissalow默認按位拷貝構造」的評論就指出這樣一個事實當我定義一個類型時,我需要定義我自己的拷貝構造函數,以避免編譯器爲我「模糊生成」一個拷貝構造函數。這是我迄今在這個主題上學到的。但在這種情況下,構造函數是private,並且編譯以此形式中斷。
問:是否有這樣的理由?一個私人的複製構造函數?這個評論意味着什麼?
托米斯拉夫
通常,複製構造函數只是聲明爲私有的,並未實現,賦值運算符接收相同的處理。罕見的情況是你不想公開復制構造函數,但私人構造函數是有意義的。 – AProgrammer 2011-06-10 07:57:18
如果我定義了任何拷貝構造函數** private **或** public **,編譯器將不會生成一個。如果編譯器被賦予一個引用而不是一個值作爲參數,它將採用引用而不是值。如果它是私人的,它不能從課外被調用,其中兩個可能不存在。這是否意味着類的模板是這樣寫的,以迫使程序員定義他自己的公共副本(或私人)構造函數? – tmaric 2011-06-10 08:02:30
不,當這樣寫時,它是*防止*課程被複制*完全*。一旦存在複製構造函數,就不能創建第二個構造函數。如果它是私密的,那麼它實際上意味着該類不能被複制。 – jalf 2011-06-10 08:06:27