[英]Using “new” multiple times on the same pointer
當我做類似的事情時會發生什么
int * ptr = new int;
*ptr = 5;
// ... do some stuff here
ptr = new int;
// ... reuse ptr to do some other stuff
而不是
int * ptr1 = new int;
*ptr1 = 5;
// ... do some stuff here
delete ptr1;
int * ptr2 = new int;
// ... use ptr2 now
????
在硬件級別發生同樣的事情嗎? 換句話說,在第一種情況下, ptr = new int;
繼續前一個指針/值對,這些舊值會發生什么? 它們是否被替換,它們只是漂浮在某個地方等等?
你的int *ptr
只是一個存儲地址的變量,僅此而已。
在你的第一個int * ptr = new int;
,它包含動態分配的整數的地址。 在你的第二個int * ptr = new int;
,它包含另一個動態分配的整數的地址。
然后發生的事情並不特別,唯一的事情是你沒有調用delete
因此永遠不會釋放為第一個整數分配的內存。 沒有什么可以跟蹤它,它的地址不存儲在任何地方,因此它將在程序結束之前保持無用的分配空間。
在第一個示例中,指針被覆蓋,但它指向的對象仍然存在並且在某處“浮動”。 這會導致內存泄漏 。
如果在常用功能或循環中發生這種情況,您可能很容易耗盡內存,存儲您不能再也不會訪問的值。
泄漏實際上是一個非常常見的錯誤。 一個好的做法是通過使用諸如shared_ptr
智能指針來避免它。 這些跟蹤使用計數,並在不再使用時自動釋放對象。 例如:
shared_ptr<int> ptr = make_shared<int>(); // allocate an int
*ptr = 5;
// ... do some stuff here
ptr = make_shared<int>(); // the old object is no longer used so deleted automatically
// ... reuse ptr to do some other stuff
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.