Как проверить, что объект действителен - PullRequest
0 голосов
/ 25 апреля 2018

У меня есть свой объект класса, если у меня есть этот объект в разных местах, и когда я удалил и инициализировал этот объект как 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 голосов
/ 25 апреля 2018

С 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;
}
0 голосов
/ 25 апреля 2018

Спасибо @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.Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...