0
有人可以在這裏解釋崩潰嗎?unique_ptr當調用reset時數組崩潰
#include <iostream>
#include <memory>
int main() {
int *num1 = new int(5), *num2 = new int(18);
std::unique_ptr<int> numptr = std::unique_ptr<int>(num1);
std::cout << *numptr.get() << '\n'; // 5
numptr.reset(num2);
std::cout << *numptr.get() << '\n'; // 18
int a[5] = {0,2,4,6,8}, b[5] = {0,3,6,9,12};
std::unique_ptr<int[]> u = std::unique_ptr<int[]>(a);
std::cout << u[3] << '\n'; // 6
u.reset(b);
std::cout << u[3] << '\n'; // Crash. Why??? Should output 9, right?
}
沒有崩潰調用具有std::unique_ptr<int>
復位時,爲什麼與std::unique_ptr<int[]>
崩潰。如我所見,u
取得b
的所有權,然後刪除a
。所以u[3]
應該是b[3] = 9
應該工作正常,因爲b
不會被刪除。這裏發生了什麼?
'unique_ptr'只能管理動態分配的對象。 「a」和「b」都不是其中之一。 – juanchopanza
那麼上面的「u」是做什麼的? – prestokeys
'std :: unique_ptr'假定它保存的啞指針在'new'或'new []'的堆上被分配。在其析構函數或reset()中,它試圖「刪除」或「刪除[]」指針。您反而將它提供給堆棧上自動對象的地址。 –