2015-01-04 74 views
0

我有這段代碼,練習是找出如果我構建一個我的類的實例並在之後刪除它會發生哪個錯誤。我無法找到這個班的定義中的錯誤,所以也許你可以幫助我。下面的代碼:C++不好的類實例

class BadClass{ 
public: 
BadClass(){ 
    p = new double; 
} 
~BadClass() {} 

    double getValue() {return *p;} 
    void setValue(double v) {*p = v;} 

private: 
    double* p; 
}; 
+0

請參見[Rule_of_three](http://en.wikipedia.org/wiki/Rule_of_three_%28C%2B%2B_programming%29) – Jarod42 2015-01-04 14:50:15

回答

2

你調用構造函數new double沒有在析構函數相應delete p電話。

這將導致內存泄漏。

+0

好的謝謝@APerson我已經考慮過了,所以標準析構函數不會刪除動態分配記憶? – Franklinprogs 2015-01-04 12:56:40

+0

@Franklinprogs否,您必須在C++中手動管理內存所有權。但是,您可以使用'std :: shared_ptr '和'std :: unique_ptr '幫助程序類 – Erbureth 2015-01-04 13:13:16

+1

@Erbureth:或者在這種情況下甚至是'double'。 – Jarod42 2015-01-04 14:39:04

0

的問題是,在你的構造你動態內存分配爲p,但是當你打電話給你的析構函數(或者你走出去的範圍),該內存不釋放,有一個類似的聲明delete p;(你必須明確地做)。