2010-10-30 63 views
1

我有一個類A,我構造了一個名爲bb的B類對象。 在構造對象bb之後,我運行由異常處理程序捕獲的A類代碼中的異常。 現在我的問題是如何在異常處理程序中釋放對象B的內存?如何在C++中釋放內存

+0

「show code」always help ... – akira 2010-10-30 07:15:17

+2

發佈一些代碼可能會有幫助。我不明白爲什麼你不能簡單地通過調用'delete'在異常處理程序中釋放對象B. – 2010-10-30 07:15:19

+3

沒有代碼,沒有餅乾。 – sbi 2010-10-30 07:17:37

回答

1

使用shared_ptr

struct B {...}; 

struct A { 
    A() : bb(new B) {} // auto-deallocate 
    boost::shared_ptr<B> bb; 
} 
+0

使用'boost :: make_shared'而不是'new'更安全(在本例中可能不是這樣),使用更少的內存,而且速度更快。 – dalle 2010-10-30 07:22:29

0

如果B類對象是類A(聚合模式)的成員對象,那麼你甚至都不需要,只要爲B本身是RAII-ED明確地釋放它。另一方面,如果它是一個堆對象(A在堆上動態分配bb),則需要明確釋放它。您可以使用boost :: scoped_ptr或boost :: shared_ptr(取決於您是否希望將bb的本機與其他人共享)來保存對象bb的所有者,以便在刪除類A對象時自動釋放它。