class A
{
public:
A() = default;
A(const A&) = delete;
};
class A
{
public:
A() = default;
private:
A(const A&) = delete;
};
這兩個定義在任何情況下總是相同嗎?必須刪除一個構造函數是否是私有的?
class A
{
public:
A() = default;
A(const A&) = delete;
};
class A
{
public:
A() = default;
private:
A(const A&) = delete;
};
這兩個定義在任何情況下總是相同嗎?必須刪除一個構造函數是否是私有的?
它們不同只有生成的診斷。如果你把它private
,額外的和多餘的訪問違例報告:
class A
{
public:
A() = default;
private:
A(const A&) = delete;
};
int main()
{
A a;
A a2=a;
}
結果如下額外輸出從GCC 4.8:
main.cpp: In function 'int main()':
main.cpp:6:5: error: 'A::A(const A&)' is private
A(const A&) = delete;
^
main.cpp:12:10: error: within this context
A a2=a;
^
因此,我的建議總是刪除方法public
。
+1。我公開我的已刪除函數,因爲它是向公衆用戶發佈的公告**,它不能被默認構建(在OP的情況下)。 – Nawaz
@Nawaz對,因此它也可以被認爲是類的接口/文檔的一部分。 –
我想擴展Daniel Frey's answer。而不是刪除方法總是public
,我寧願給這些方法訪問修飾符你會(假設)給這些方法,如果他們不會被刪除。 (我不喜歡總是的情況下,程序員有一個選項,如果它確實會在石頭上,使刪除方法public
,它應該由語言本身來執行雕刻。)
的拇指/準則某些規則:
public
在大多數情況下。public
在具體類大多數情況下。protected
抽象類。friends
在大多數情況下被實例化具體final
類private
。在任何情況下,您都會向類的相應用戶發佈通告,而不是某個類的所有用戶。
我公開我的刪除功能,因爲它是**向公衆用戶發佈的公告,它不能默認構建(在你的情況下)。 – Nawaz