へんじがない、ただのしかばねのようだ
在 C++ 中, in general, 一個 class type 是否有 virtual destructor (繼承過來的也算) 可以視為作者是否將該 class type 設計為可被繼承的指標.當然這也有例外, 譬如說沒有任何 non-static member 的 class, 如 traits classes.
這讓我想到一些問題...比方說policy classes在多重繼承無雙的情況下是否每個都會被正確解構...
啥是 "多重繼承無雙"???
template< class A< class >, class B, class C >class Base : A, B, C {};(not really C++ code)
一般來說, policy/traits classes 沒有 "object instance 正確解構" 的問題. 因為 (AFAIK) by definition, policy/traits classes 都沒有 non-static member, 自然也就沒有 virtual function, which has to be non-static.另外, 正常來說它們不會直接被拿來做 object instantiation. 雖然可能有些時候為了好寫 code, 會故意拿這些 class 來的 object instance 來做事情, 也不會以 polymorphic 的方式來操作它們. 因此, 還是不會有是否會被正確解構的問題.
在 C++ 中, in general, 一個 class type 是否有 virtual destructor (繼承過來的也算) 可以視為作者是否將該 class type 設計為可被繼承的指標.
回覆刪除當然這也有例外, 譬如說沒有任何 non-static member 的 class, 如 traits classes.
這讓我想到一些問題...
回覆刪除比方說policy classes
在多重繼承無雙的情況下
是否每個都會被正確解構...
啥是 "多重繼承無雙"???
回覆刪除template< class A< class >, class B, class C >
回覆刪除class Base : A, B, C {};
(not really C++ code)
一般來說, policy/traits classes 沒有 "object instance 正確解構" 的問題. 因為 (AFAIK) by definition, policy/traits classes 都沒有 non-static member, 自然也就沒有 virtual function, which has to be non-static.
回覆刪除另外, 正常來說它們不會直接被拿來做 object instantiation. 雖然可能有些時候為了好寫 code, 會故意拿這些 class 來的 object instance 來做事情, 也不會以 polymorphic 的方式來操作它們. 因此, 還是不會有是否會被正確解構的問題.