Đến từ một nền Java, tôi vẫn còn hơi bối rối về việc cấp phát bộ nhớ trong C++. Tôi chắc chắn hai tuyên bố đầu tiên là chính xác:C++ Phân bổ bộ nhớ trên heap và ngăn xếp?
void method() {
Foo foo; // allocates foo on the stack, and the memory is freed
// when the method exits
}
void method2() {
Foo *foo = new Foo(); // allocates foo on the heap
delete foo; // frees the memory used by foo
}
Nhưng còn về điều gì đó như thế này?
void method3() {
Foo foo = *new Foo(); // allocates foo on the heap, and then copies it to the stack?
// when the method exits, the stack memory is freed, but the heap memory isn't?
}
Giả sử tôi đã thêm foo
vào mảng toàn cầu bên trong method3()
. Nếu tôi cố gắng truy cập một trong số các thành viên dữ liệu của foo
sau khi thoát khỏi phương pháp, điều đó có hiệu quả không? Và có phải method3()
dễ bị rò rỉ bộ nhớ không?
Xin cảm ơn trước.
'Foo foo();' thực sự không phân bổ bất kỳ thứ gì. Nó khai báo một hàm. – chris