簡體   English   中英

在課程內刪除

[英]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();

}

如何檢查刪除操作員是否刪除了數據? 可能嗎?

  1. 使用delete this; 幾乎總是“壞”。 雖然有例外,但確實非常不尋常。 考慮一下您要做什么。 大多數情況下,這意味着您應該有一個包裝對象和一個由包裝對象創建/刪除的內部對象。

  2. 您無法檢查是否已刪除某些內容(以可靠的方式/便攜式的方式)。 在您的特定測試用例中,您正在通過“在對象被銷毀后使用對象”來行使“未定義的行為”,這意味着您無法真正判斷將要發生的情況。 你必須相信C ++運行時delete做什么它說,在標簽上。

在C ++中,除了void以外,還有其他可用的返回值。 因此,您的action可以返回一些內容,指示this是否已刪除。

請注意,刪除this后,您不應訪問任何非靜態數據成員或調用任何非靜態成員函數。 有些人覺得很難保證,因此他們一律禁止delete this

反對者請注意, C ++ FAQ聲稱delete this是合法的,我還沒有發現任何禁止它的內容。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM