簡體   English   中英

在同一個指針上多次使用“new”

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM