2011-04-11 73 views
1

我在C++中有一些Base類。我使用boost :: python將它導出到python中。但是虛擬析構函數呢?任何基類應該有虛擬析構函數來避免錯誤的內存釋放,對吧?我忘記了這一點,並寫了Base沒有析構函數。一切正常,但有很多內存泄漏。析構函數和python

現在我補充說:

class Base 
{ 
    public: 
     virtual ~Base(); 
     // Other members... 
}; 

和導入我的Python模塊後,我得到一個錯誤:

ImportError: Base.so: undefined symbol: _ZTI6Base

我做錯了嗎?而且,據我所知,由於缺少py-module的析構函數導出器導致錯誤。

+2

@Ockonal: '每個基類應該有虛擬析構函數'是不正確的,除非你的基類是'polymorphic' – 2011-04-11 15:08:08

+0

@Okonal:你確定你已經將析構函數導出到導入庫嗎?你確定你實現了這個功能嗎? – 2011-04-11 15:09:11

+0

@als無法理解你:('polymorphic'是什麼意思? – Ockonal 2011-04-11 15:13:02

回答

2

丟失的符號錯誤可能是由你未能造成定義析構函數(你聲明的但是從你的問題還不清楚你是否定義爲 it):

class Base 
{ 
    public: 
     virtual ~Base() {} 
     // Other members... 
}; 

(注意添加大括號)

至於你大約每隔是否「基類應該有虛析構函數,以避免錯誤的內存釋放」的問題,請看看常見問題:http://www.parashift.com/c++-faq-lite/virtual-functions.html#faq-20.7

+0

感謝您的信息 – Ockonal 2011-04-11 15:16:38

+0

';'析構函數之後是spu rious。 – 2011-04-11 16:30:10

0

你可以只是做

class Base 
{ 
    public: 
     virtual ~Base() {} 
     // Other members... 
}; 

,確保析構函數定義

+0

那麼,析構函數會自動導出嗎? – Ockonal 2011-04-11 15:11:12

+0

什麼都沒有自動導出 – 2011-04-11 15:16:19