std::shared_ptr和QPointer的区别是使用方式,分别写一个使用例程
时间: 2024-05-12 20:18:33 浏览: 222
std::shared_ptr和QPointer是两种不同的智能指针。
std::shared_ptr是C++11标准库提供的智能指针,用于解决C++中的内存泄漏问题。它通过自动释放内存来避免手动管理内存的问题。下面是一个示例程序:
```
#include <memory>
#include <iostream>
class MyClass {
public:
void print() {
std::cout << "Hello, World!\n";
}
};
int main() {
std::shared_ptr<MyClass> ptr(new MyClass);
ptr->print();
return 0;
}
```
在这个例程中,我们创建了一个名为ptr的std::shared_ptr指针,它指向MyClass类的对象。当使用完这个对象后,我们不需要手动删除它,因为std::shared_ptr会自动释放这个对象的内存。
QPointer是Qt框架提供的智能指针,用于解决Qt中的内存泄漏问题。和std::shared_ptr一样,它也可以自动释放内存,但它在释放内存时会检查指针是否仍然有效。下面是一个示例程序:
```
#include <QCoreApplication>
#include <QPointer>
#include <QDebug>
class MyClass : public QObject {
Q_OBJECT
public:
MyClass(QObject* parent = nullptr) : QObject(parent) {}
void print() {
qDebug() << "Hello, World!";
}
};
int main(int argc, char *argv[]) {
QCoreApplication app(argc, argv);
QPointer<MyClass> ptr = new MyClass(&app);
ptr->print();
return app.exec();
}
```
在这个例程中,我们创建了一个名为ptr的QPointer指针,它指向MyClass类的对象。当使用完这个对象后,我们不需要手动删除它,因为QPointer会自动释放这个对象的内存。此外,当我们在释放内存时,QPointer会检查指针是否仍然有效。如果指针已经失效,那么QPointer不会进行释放操作。
阅读全文