В моем конструкторе я инициализирую поле. Поле уничтожается сразу после инициализации. Вот мой код, и мой тест:Почему мое поле класса разрушено в конструкторе
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);
T .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
'// если я не комментирую это я получаю Segfault при вызове добавить method' - это потому, что вы нарушили правило три/Правилу из пяти. Избегайте ручного управления памятью с помощью raw 'new' и' delete'. Вместо этого используйте 'std :: vector'. –
Это упражнение, поэтому я не могу использовать вектор – Hunsu
. Затем выполните конструктор копирования и оператор присваивания копий правильно. Утечка памяти - это ** не ** решение. – Angew