我有一個問題,我敢肯定,我知道它的原因。我只是想澄清一下。我有一個包含其他類的類,但爲了簡單起見,我將示例限制爲兩個類。C++需要澄清關於析構函數和範圍
A類包含B類。在A類的構造函數中,它通過調用B的構造函數來初始化B類。在A類構造函數的最後,B類的析構函數被調用,這不是我期待的行爲。下面是一個例子...
啊
#include "b.h"
class a {
public:
b classB;
a(int someParam);
};
a.cpp
#include "a.h"
//Class A's constructor
a::a(int someParam) {
//Set class B by calling it's constructor
classB = b(someParam);
//Now class B's destructor gets called when exiting A's constructor...
}
我知道,如果你聲明的變量,而不使用「新」,它就會當它離開當前銷燬範圍。但我一直認爲它應用於變量的作用域,而不是你爲其賦值的範圍。那是的問題吧?如果是這樣,那麼做classB = *new b(someParam);
是沒有問題的?或者我應該只使用指針?
閱讀一本好的C++編程書。 'classB = * new b(someParam);''*複製'new b'創建的對象(所以你有內存泄漏)。 –
@BasileStarynkevitch好吧,這很好。謝謝 –