如何检查对象是否有效

时间:2018-04-25 13:32:46

标签: c++ qt pointers

我有我的类对象,如果我在不同的地方有这个对象,当我删除并初始化这个对象为NULL时,我希望这个对象在所有其他地方都是NULL。有可能吗?

#include "mainwindow.h"
#include <QApplication>
#include "QDebug"

class A {
public:
    int x;
    int y;
};

class B : public A {
public:
    B(int a, int b) {
        this->m = a;
        this->n = b;
    }

    int m;
    int n;
};

int main(int argc, char *argv[])
{
QApplication a(argc, argv);

B* temp = new B(1, 2);
B* b1 = temp;
B* b2 = temp;

delete temp;
temp = NULL;

qDebug() << b1->x << b2->x; //its print 421312312 -2131231231

return a.exec();
}

2 个答案:

答案 0 :(得分:0)

感谢@NathanOliver和所有人。

我正在使用QSharedPointer。

    QSharedPointer<B> obj = QSharedPointer<B>(new B(1, 2));

    obj.clear();

    B* t = obj.data();

    if (t)
        qDebug() << t->m << t->n;
    else {
        qDebug() << "NULL";
    }

现在t为NULL。谢谢!

答案 1 :(得分:0)

使用std,它将类似于:

auto temp = std::make_shared<B>(1, 2);
std::weak_ptr<B> w1 = temp;
std::weak_ptr<B> w2 = temp;

temp.reset();


auto b1 = w1.lock();
auto b2 = w2.lock();
if (b1 && b2) {
    qDebug() << b1->x << b2->x;
}