2013-04-04 59 views
2

我有一個類:A,我寫了析構函數。執行析構函數

現在我有一個類B

class B { 
    A* a; 
    public: 
    B() { 
     a = new A[10]; 
    } 

    ~B() { 

    } 

}; 

我想要實現B.

的析構函數,我認爲是這樣的:

~B() { 
    delete[] a; 
} 

,但我得到了一個錯誤。

也許我必須做下一行?

delete a; 

任何幫助讚賞!

+2

什麼是錯誤? – sepp2k 2013-04-04 12:15:45

+1

'delete [] a;'是正確的。你得到的錯誤是什麼? – jrok 2013-04-04 12:15:46

+0

可能你省略了一些相關的代碼? – moooeeeep 2013-04-04 12:16:26

回答

4

你不說你得到了什麼錯誤,但是下面的編譯沒有錯誤:

class A {}; 

class B { 
    A* a; 
    public: 
    B() { 
     a = new A[10]; 
    } 

    ~B() { 
     delete[] a; 
    } 
}; 

注意,這是因爲它違反了Rule of Three不完整的。 B::a應該是一個合適的智能指針,或者該類需要實現複製構造函數和複製賦值運算符(或disable both)。更好的選擇是使用std::vectorstd::array而不是原始指針。

+0

+1,特別是指出三法則。 – Angew 2013-04-04 12:36:33

+0

...或者它應該是標準庫中相應的容器類。 – moooeeeep 2013-04-04 14:40:08

+0

@moooeeeep:好的,謝謝。我已經更新了包含這個的答案。 – NPE 2013-04-04 14:43:32