作者dk3208 (A士一對)
看板C_and_CPP
標題[問題] 關於模擬java中的final class
時間Wed Sep 1 16:46:46 2010
剛才看到一個idiom是模擬java中final class的行為(non-inheritable),
http://en.wikibooks.org/wiki/More_C%2B%2B_Idioms/Final_Class
但我在VC9上嘗試的結果是必須將ctor改為private而非dtor才能正常運作.
以下為測試的code
template <class T>
class final
{
//final() {} // 額外加上private ctor後才有效果
~final() {}
friend class A;
};
class A : virtual final<A>
{
};
class B : public A
{
};
int main()
{
B b;
return 0;
}
透過virtual inheritance,
final會由derived-most class(也就是B)直接建構及解構,
但為何這裡的B卻可以合法解構final?
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.118.155.78
※ 編輯: dk3208 來自: 140.118.155.78 (09/01 16:50)
推 tomap41017:gcc 4.5.0編譯無法通過喔 09/01 17:32
推 tomap41017:抱歉= =請自動忽略上述推文 09/01 17:35
推 loveme00835:這行一樣能過 final<int> *p = new final<int>(); 09/01 20:11
→ loveme00835:看來在VC9中trivial default ctor是 access level 是 09/01 20:12
→ loveme00835:public 09/01 20:13
→ loveme00835: ^的 09/01 20:15