Me encuentro con el siguiente error.cuestión de asignación de memoria relacionada con el vector
- Tengo una clase
Foo
. Las instancias de esta clase se almacenan en un estándar :: vectorvec
declass B
. - en la clase Foo, estoy creando una instancia de clase A asignando memoria usando
new
y eliminando ese objeto en~Foo()
.
el código se compila, pero me da un fallo en el tiempo de ejecución. Si desactivo delete my_a
del desstructor de la clase Foo
. El código funciona bien (pero habrá una fuga de memoria).
¿Podría alguien explicar por favor lo que está pasando aquí y sugerir una solución?
gracias!
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;
}
Gracias Neil. ¿Cómo debería crear una instancia de clase A entonces? Un fragmento de código sería muy apreciado. Además, cómo sería copiar el código del operador de asignación y constructur. Muchas gracias – memC
Neil tienes un error tipográfico ... nuevo A (f.my_a); -> nuevo A (* f.my_a); – TimW
Hola, Neil, muchas gracias por el fragmento de código. En realidad, quiero pasar el 'int val' para' my_a' mientras pongo la instancia de Foo en el vector. ¿Cómo puedo hacer eso? -> Quiero algo como esto: (por supuesto que no funciona) 'vec.push_back (Foo(): my_a (40)' – memC