我使用boost::scoped_ptr
並在頭文件中預先聲明:什麼翻譯單位持有隱含定義的特殊成員函數?
//Bar.h
class Foo;
class Bar;
{
private:
boost::scoped_ptr<Foo> _foo;
};
我沒有實現我自己的析構函數,因爲智能指針將做的工作。
我將這個頭文件包含在多個翻譯單元中,並不是所有的都包含Foo
定義。當試圖編譯時,我得到一個錯誤,scoped_ptr
正在刪除一個指針,指向不完整類型Foo
。
如果我在Bar.h
中聲明空的析構函數並在Bar.cpp
中實現它,一切都很容易修復。
但是,如果析構函數是在頭文件中實現的,我得到了同樣的錯誤。
所以問題是:在哪個翻譯單元做隱式定義的方法去?
@DavidRodríguez-dribeas:謝謝,我選擇了你的配方 – Andrew 2012-08-13 13:20:28
由於同樣的原因,我編輯了最後一句話。還刪除了對* default構造函數/析構函數*的引用。在C++中,默認構造函數是不帶參數的構造函數,無論它是否被隱式定義。 – 2012-08-13 13:22:15
@DavidRodríguez-dribeas:是的,你說得對,謝謝 – Andrew 2012-08-13 13:23:54