Tôi đang gặp phải lỗi sau.câu hỏi phân bổ bộ nhớ liên quan đến vector
- Tôi có một lớp
Foo
. Các cá thể của lớp này được lưu trữ trong một tiêu chuẩn :: vectorvec
củaclass B
. - trong lớp Foo, tôi đang tạo một phiên bản lớp A bằng cách cấp phát bộ nhớ bằng cách sử dụng
new
và xóa đối tượng đó trong~Foo()
.
biên dịch mã, nhưng tôi gặp sự cố khi chạy. Nếu tôi vô hiệu hóa delete my_a
từ người cố vấn của lớp Foo
. Mã chạy tốt (nhưng sẽ bị rò rỉ bộ nhớ).
Ai đó có thể giải thích điều gì đang xảy ra ở đây và đề xuất sửa lỗi?
cảm ơn bạn!
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;
}
Cảm ơn Neil. Làm thế nào tôi nên tạo ví dụ của lớp A sau đó? Đoạn mã sẽ được nhiều người đánh giá cao. Ngoài ra, làm thế nào sẽ sao chép constructur và chuyển nhượng mã điều hành như thế nào. Cảm ơn rất nhiều – memC
Neil bạn có lỗi đánh máy ... mới A (f.my_a); -> mới A (* f.my_a); – TimW
hi Neil, cảm ơn rất nhiều vì đoạn mã. Trên thực tế, tôi muốn chuyển 'int val' cho' my_a' trong khi đặt cá thể Foo trong vectơ. Làm thế nào để làm điều đó? -> Tôi muốn một cái gì đó như thế này: (Tất nhiên nó không hoạt động) 'vec.push_back (Foo(): my_a (40)' – memC