Qt_IM_4 - 8BitsCoding/RobotMentor GitHub Wiki
간략하게 정리하면
QSharedPointer<consumer> c(new consumer, &QObject::deleteLater);
과 같이 sharedpointer를 선언가능하며
c.clear()
로 reference 해제를 할 수 있다.
// main.cpp
#include <QtCore/QCoreApplication>
#include <qdebug.h>
#include <qsharedpointer.h>
#include "test.h"
#include "consumer.h"
// QSharedPointer will delete the pointer it is holding when it goes out of scope,
// provided no other QSharedPointer objects are referencing it.
void doDeleteLater(test * obj) {
qInfo() << "Deleting : " << obj;
obj->deleteLater();
}
QSharedPointer<test> createPointer() {
test* t = new test(); // the bad way
t->setObjectName("Test Object");
QSharedPointer<test> p(t, doDeleteLater);
return p;
}
void doStuff(QSharedPointer<consumer> ptr) {
qInfo() << "In Function : " << ptr.data()->tester;
ptr.clear();
// Does not actully delete!
// just remove the reference
}
QSharedPointer<consumer> makeConsumer() {
QSharedPointer<consumer> c(new consumer, &QObject::deleteLater);
QSharedPointer<test> t = createPointer();
c.data()->tester.swap(t);
doStuff(c);
return c;
}
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QSharedPointer<consumer> consume = makeConsumer();
qInfo() << "In main : " << consume.data()->tester;
consume.clear();
// Does not actully delete!
// just remove the reference
return a.exec();
}
// test.h
#pragma once
#include <qobject.h>
#include <qdebug.h>
class test : public QObject
{
Q_OBJECT
public:
explicit test(QObject* parent = nullptr);
~test();
signals:
public slots:
};
// test.cpp
#include "test.h"
#include <qdebug.h>
test::test(QObject* parent) : QObject(parent)
{
qInfo() << "test class Created!";
}
test::~test()
{
qInfo() << "test class destructed!";
}
// consumer.h
#pragma once
#include <qobject.h>
#include <qdebug.h>
#include <qsharedpointer.h>
#include "test.h"
class consumer : public QObject
{
Q_OBJECT
public:
explicit consumer(QObject* parent = nullptr);
~consumer();
QSharedPointer<test> tester;
signals:
public slots:
};
// consumer.cpp
#include "consumer.h"
consumer::consumer(QObject* parent) : QObject(parent)
{
qInfo() << "consumer class Created!";
}
consumer::~consumer()
{
qInfo() << "consumer class Destructed!";
}