Я столкнулся с следующей ошибкой.связанный с памятью вопрос о распределении памяти
- У меня есть класс
Foo
. Экземпляры этого класса хранятся в std :: vectorvec
отclass B
. - в классе Foo, я создаю экземпляр класса A путем выделения памяти с помощью
new
и удаления этого объекта в~Foo()
.
код компилируется, но я получаю сбой во время выполнения. Если я отключу delete my_a
от десстрефатора класса Foo
. Код работает нормально (но будет утечка памяти).
Не могли бы вы объяснить, что здесь происходит, и предложить исправить?
спасибо!
class A{
public:
A(int val);
~A(){};
int val_a;
};
A::A(int val){
val_a = val;
};
class Foo {
public:
Foo();
~Foo();
void createA();
A* my_a;
};
Foo::Foo(){
createA();
};
void Foo::createA(){
my_a = new A(20);
};
Foo::~Foo(){
delete my_a;
};
class B {
public:
vector<Foo> vec;
void createFoo();
B(){};
~B(){};
};
void B::createFoo(){
vec.push_back(Foo());
};
int main(){
B b;
int i =0;
for (i = 0; i < 5; i ++){
std::cout<<"\n creating Foo";
b.createFoo();
std::cout<<"\n Foo created";
}
std::cout<<"\nDone with Foo creation";
std::cout << "\nPress RETURN to continue...";
std::cin.get();
return 0;
}
Спасибо Нейл. Как мне создать экземпляр класса A? Было бы очень полезно оценить фрагмент кода. Кроме того, как бы копировать конструктор и код оператора присваивания. Большое спасибо – memC
Neil у вас есть опечатка ... new A (f.my_a); -> новый A (* f.my_a); – TimW
привет Нейл, большое спасибо за фрагмент кода. На самом деле, я хочу передать 'int val' для' my_a', помещая экземпляр Foo в вектор. как это сделать? -> Мне нужно что-то вроде этого: (конечно, это не работает) 'vec.push_back (Foo(): my_a (40)' – memC