[英]How can I avoid double deleting variables in c++?
我在這里以及其他地方已經閱讀過兩次刪除相同的變量可能是災難性的(即使有多個變量名稱)。
假設我有一個帶輸入和輸出數組的函數:
void test(int*& input, int*& output) {
if(input[0] == 0) {
output = input;
}
}
它可以指定一個指向另一個我正在使用的變量的指針:
int *input = new int[3];
int *output = new int[3];
input[0] = 0;
test(input, output);
delete[] input;
delete[] output;
我該如何避免雙重刪除?
在這個過於簡化的場景中,我知道我可以檢查指針地址以查看它們是否相等並且有條件地僅刪除其中一個,但是當我不知道指針可能指向同一個內存時,是否有更好的解決方案?
編輯:
收拾東西以避免一些混亂..
避免雙重刪除的方法是設計代碼,以便很好地定義對象的所有權。 盡管所有權可以從一個擁有實體傳遞到另一個擁有實體,但一次只能有一個對象的所有者。 對象所有者可以是一段代碼(例如函數)或數據結構。 當所有者完成一個對象時,所有者有責任將所有權傳遞給其他東西或銷毀該對象。
一般來說,避免雙重刪除的最佳方法是不直接用new
分配內存。 您可以使用各種智能指針,如scoped_ptr
和shared_ptr
,在您的情況下,您可以使用std::Vector
:
typedef std::vector<int> Ints;
void test(const Ints& input, Ints& output)
{
if(input[0] == 0) {
output = input;
}
}
Ints input(3);
Ints output(3);
input[0] = 0;
test(input, output);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.