由於boost::/std::shared_ptr
有型擦除其刪除器的優勢,可以做好事像如果您始終將其存儲在shared_ptr中,那麼您的界面是否需要虛擬析構函數?
#include <memory>
typedef std::shared_ptr<void> gc_ptr;
int main(){
gc_ptr p1 = new int(42);
gc_ptr p2 = new float(3.14159);
gc_ptr p3 = new char('o');
}
而且所有指針感謝被保存了正確的缺失者,這將正確地刪除。
如果您確保您的界面的每個實現始終使用shared_ptr<Interface>
(或make_shared<Interface>
)創建,您實際上是否需要一個virtual
析構函數?無論如何,我會聲明它爲virtual
,但我只想知道,因爲shared_ptr
將始終刪除它初始化的類型(除非給出另一個自定義刪除程序)。
可能重複的[shared_ptr magic:)](http://stackoverflow.com/questions/3899790/shared-ptr-magic) –
@Armen:這不是重複的,他不是問'shared_ptr'如何它,但是否應該使用虛擬析構函數*知道* shared_ptr具有這種魔力。 –
@大衛:不,他沒有。他說他無論如何都會使用虛擬析構器。他問是否沒有一個。所以它是重複的 –