0
我已經閱讀了一些關於智能指針的指南,並且我認爲我理解它的竅門(沒有雙關語意思),但有些東西仍然困擾着我。智能指針和堆棧對象
智能指針用於指向堆中使用new分配的數據,一旦智能指針超出範圍,析構函數就會釋放指針指向的信息。但是,假設我犯了一個錯誤,並且使智能指針指向堆棧上而不是堆上分配的對象。在這種情況下,我會得到一個令人討厭的分段錯誤錯誤,因爲我會嘗試在堆棧對象上使用刪除。
爲了說明這個問題,下面是兩個代碼片段。對於這個演示,我使用智能指針的this實現。首先,正確的方式來使用智能指針
int main(void)
{
int my_num = 17;
int *p = new int(my_num);
MyAuto_Ptr<int> p2(p);
return 0;
}
和這裏的車版本,一個指向堆棧對象,這將導致分段錯誤。
int main(void)
{
int my_num = 17;
int *p = &my_num;
MyAuto_Ptr<int> p2(p);
return 0;
}
如果智能指針指向堆棧對象,有什麼方法可以提醒用戶嗎?
替換「,這導致分段錯誤「與」調用未定義的行爲「。就像'刪除p'一樣。 – Elazar