[英]Delete inside of class
我遇到了一些奇怪的問題。 我在類方法內使用刪除運算符,我想知道如何解決此問題。
這是代碼:
#include <iostream>
using namespace std;
class A
{
public:
int a;
~A() {
cout << "call ~A()" << endl;
}
void action()
{
/* code here */
delete this; //this line depends on some if statements
/* code here */
}
void test2() {
cout << "call test2()" << a << endl;
}
void test() {
a = 10;
cout << "call test()" << endl;
action();
//how can I check if data is deleted?
test2();
}
};
int main()
{
A* a = new A();
a->test();
}
如何檢查刪除操作員是否刪除了數據? 可能嗎?
使用delete this;
幾乎總是“壞”。 雖然有例外,但確實非常不尋常。 考慮一下您要做什么。 大多數情況下,這意味着您應該有一個包裝對象和一個由包裝對象創建/刪除的內部對象。
您無法檢查是否已刪除某些內容(以可靠的方式/便攜式的方式)。 在您的特定測試用例中,您正在通過“在對象被銷毀后使用對象”來行使“未定義的行為”,這意味着您無法真正判斷將要發生的情況。 你必須相信C ++運行時delete
做什么它說,在標簽上。
在C ++中,除了void
以外,還有其他可用的返回值。 因此,您的action
可以返回一些內容,指示this
是否已刪除。
請注意,刪除this
后,您不應訪問任何非靜態數據成員或調用任何非靜態成員函數。 有些人覺得很難保證,因此他們一律禁止delete this
。
反對者請注意, C ++ FAQ聲稱delete this
是合法的,我還沒有發現任何禁止它的內容。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.