我問過一個類似的問題,但現在我想更具體。 我所面臨的問題是,我有一個包含非可複製對象,當有人想用我的接口和他沒有利用好(沒有嘗試使用對象的拷貝構造函數),他將得到一個編譯錯誤將一個對象指向對象而不是他的實際代碼。 所以兩個問題:1。 我可以修復它以某種方式把它指向他原來的代碼行? 2.如果我不能,我怎樣才能把一個static_assert,如果有人竟試圖使用複製c'tor只會發生(我已經嘗試了一些,但後來我讓他們即使有人不使用它.. )編制包含非可複製對象的對象警示不可讀
我添加了一個示例代碼和編譯錯誤,以防我不明白... 注意最後編譯錯誤指向ObjectHolder h。文件..而我希望它指向主 謝謝!
*當我替換名稱時出現錯誤..它實際上是創建編譯錯誤的代碼。 和假設我不想實現私有副本c'tor只是轉發殘疾複製
class NonCopyableObject
{
public:
virtual ~NonCopyableObject() {}
NonCopyableObject(int i) { m_index = i;}
int m_index;
private:
NonCopyableObject(const NonCopyableObject& other) {}
};
class ObjectHolder
{
public:
virtual ~ObjectHolder();
ObjectHolder(int i) : obj(i) {}
NonCopyableObject obj;
};
void main()
{
ObjectHolder first(1);
ObjectHolder second(first);
}
1>------ Build started: Project: tester, Configuration: Debug Win32 ------
1> main.cpp
1>d:\users\someone\documents\visual studio 2012\projects\tester\tester\objectholder.h(13): error C2248: 'NonCopyableObject::NonCopyableObject' : cannot access private member declared in class 'NonCopyableObject'
1> d:\users\someone\documents\visual studio 2012\projects\tester\tester\noncopyableobject.h(15) : see declaration of 'NonCopyableObject::NonCopyableObject'
1> d:\users\someone\documents\visual studio 2012\projects\tester\tester\noncopyableobject.h(8) : see declaration of 'NonCopyableObject'
1> This diagnostic occurred in the compiler generated function 'ObjectHolder::ObjectHolder(const ObjectHolder &)'
嘗試隱藏的ObjectHolder拷貝構造函數太 – 2013-03-07 15:49:07
我敢肯定,這是不是導致在這裏張貼的編譯錯誤的實際代碼。 – Nawaz 2013-03-07 15:49:48
如果你不想讓你的對象可訪問的拷貝構造函數,使它'private'(或者,在C++ 11,'delete'它)。 – 2013-03-07 15:55:21