0
在我的構造函數中,我初始化一個字段。該字段在初始化後立即銷燬。 這裏是我的代碼和我的測試:爲什麼我的類字段在構造函數中被銷燬
A.hpp
class A {
private:
T t;
public:
A();
~A();
void add(string name, string num);
};
A.cpp
A::A() {
cout << "Creating A\n";
t = T(100);
cout << "End\n";
}
void A::add(string name, string num) {
cout << "calling add in A\n";
t.add(name, num);
}
T.hpp
class T {
private:
E * t;
public:
T(int size=100);
~T();
void add(std::string name, std::string num);
ŧ的.cpp
T::T(int size) : size(size) {
t = new E[size];
}
T::~T() {
cout << "Destroying\n";
// delete[] t; // if I don't comment this I get Segfault when calling add method
}
void T::add(string name, string num){
E e = E(name, num);
t[0] = e;
}
的main.cpp
int main(int argc, char* argv[]) {
A a;
a.add("name", "num");
}
輸出
Creating A
Destroying
End
calling add in A
Destroying
'//如果我不評論這個我打電話添加method'時得到段錯誤 - 這是因爲你違反了三/規則的規則五。通過原生'new'和'delete'避免手動內存管理。改用'std :: vector'。 – 2015-02-06 13:23:51
這是一個練習,所以我不能使用矢量 – Hunsu 2015-02-06 13:28:49
然後實現一個複製構造函數並正確地複製賦值運算符。內存泄漏不是**解決方案。 – Angew 2015-02-06 13:30:31