的價值我問了一個問題:檢查刪除對象
Detecting if an object is still active or it has been destroyed
考慮,我不能使用庫,沒有好的出在C盒解決方案++。所以,它是一個不好的做法,檢查對象已經被分析內存銷燬已刪除對象居住在哪裏,考慮下面的代碼:當創建類Foo的對象
#include <stdio.h>
class Foo {
public:
static unsigned int foo_id_gen; // unique id generator
unsigned int id;
int a;
Foo() {
++foo_id_gen;
if (foo_id_gen == 0) { // Handle rollover of unique ID
++foo_id_gen;
}
id = foo_id_gen; // Set unique ID
}
~Foo() {
id = 0; // Set unique ID to Zero
}
};
unsigned int Foo::foo_id_gen = 0;
class FooPtr {
public:
Foo* ptr;
unsigned int id;
explicit FooPtr(Foo* foo_obj_ptr) {
ptr = foo_obj_ptr;
id = foo_obj_ptr->id;
}
bool valid() {
return (ptr->id == id);
}
};
int main() {
Foo* A = new Foo;
FooPtr APtrOjb(A);
printf("Is valid?: %s\n", APtrOjb.valid() ? "Valid" : "Not Valid");
delete A;
printf("Is valid?: %s\n", APtrOjb.valid() ? "Valid" : "Not Valid");
}
,它得到唯一的ID不能爲零,當對象被刪除時,析構函數將唯一ID設置爲零。然後,FooPtr類型的對象可以通過檢查id的匹配來檢查Foo類的對象是否仍然活動。
注意:我知道檢查ID不會100%授予結果,因爲當存儲器被分配用於其他目的時,匹配可能發生的可能性很小。因此,讓我們假設身份驗證方法可以得到加強,以保證100%的結果,這是一個可行的解決方案嗎?
有人建議這個問題類似於C++ delete - It deletes my objects but I can still access the data?,但他的問題是關於刪除數據,但我的問題是關於檢測對象是否已被刪除。
可能重複的[C + +刪除 - 它刪除我的對象,但我仍然可以訪問數據?](http://stackoverflow.com/questions/1930459/c-delete-it-deletes-my-objects-but-我仍然可以訪問該數據) – Dukeling
這是沒有解決方案。您正在嘗試重新創建'shared_ptr' /'weak_ptr'。當與'make_shared'一起使用時,內存佔用與您的類非常相似,但不會污染您的類。它也被證明是可行的,並且是合法的代碼。爲什麼不能使用'shared_ptr'的'std'或'boost'實現? – stefan
@stefan,謝謝你將我從錯誤的設計中轉移出來...... – user1135541