int* alloc()
{
int* tmp = new int;
return tmp;
}
int main()
{
int* ptr = alloc();
......
......
delete ptr;
return 0;
}
Ở đây tôi chưa giải phóng tmp nhưng ptr được giải phóng một cách rõ ràng. Sẽ tmp cũng được giải phóng kể từ ptr và tmp tham khảo cùng một vị trí?Điều này có gây ra rò rỉ bộ nhớ trong c + + không?
Nếu không thì điều gì sẽ xảy ra với con trỏ tmp? Nó có gây rò rỉ bộ nhớ không?
Nó không gây rò rỉ. Con trỏ 'tmp' chính nó là một biến ngăn xếp, vì vậy nó không sử dụng bất kỳ bộ nhớ nào khi trả về' alloc() '. –
Làm thế nào để tmp một biến ngăn xếp khi nó sử dụng toán tử mới? – kishore
@kishore: 'ptr' chỉ giữ địa chỉ. Địa chỉ đó được lưu trữ trên ngăn xếp. Những gì nó _points to_ (tài nguyên) là ở một nơi khác, và đó là những gì bạn cần để giải phóng (tài nguyên, không phải là con trỏ). 'delete prt;' không thực sự làm _anything_ thành 'ptr'. Chỉ với những gì nó trỏ đến. – Mat