我想用qt设计模式在c++中设计和编写一个类。在我的原始类中,我只有一个从QSharedData继承的名为MyClassData的数据成员,以及一些成员函数。现在我的问题是,如果MyClassData包含指针,我应该如何在那个类中定义这个指针?
以下代码将解决我的问题:
class MyClassData : public QSharedData {
public:
MyClassData();
// one of these pointers is correct ?
int * myNormalPointer;
QSharePointer<int> myQSharedPointer;
QScopedPointer<int> myQScopedPointer;
};
class MyClass {
public:
MyClass();
// and some other member functions ...
QSharedDataPointer<MyClassData> data;
}如果我的问题不会结束,我想问一下,通常避免在类的成员字段中定义指针是正确的吗?
发布于 2016-03-05 16:18:11
从QT文档看..
http://doc.qt.io/qt-4.8/qsharedpointer.html
http://doc.qt.io/qt-4.8/qscopedpointer.html
QSharedPointer本质上是std::shared_ptr,QScopedPointer本质上是std::unique_ptr,它们是在C++11中添加的。
所有这些“智能指针”都有不同的行为,应该在不同的上下文中使用,但它们都是为了在不应该再使用时在堆上动态分配内存,这取决于所使用的智能指针的类型。
如果指针应该只用于引用(即对象不“拥有”内存(没有责任对其执行delete操作)),则只需使用int*。如果它是动态分配的,请查看这些智能指针,无论是QSharedPointer和QScopedPointer,还是std::shared_ptr和std::unique_ptr。
看看std::unique_ptr和std::shared_ptr是如何使用的,它们非常相似。
发布于 2016-03-05 16:36:18
如果你打算保持你的类的Qt设计风格,你必须在QSharedPointer<int> myQSharedPointer和QScopedPointer<int> myQScopedPointer之间做出选择。不同的是,QSharedPointer<int>比QScopedPointer<int>更复杂,提供了线程安全性和更多的调试信息。QScopedPointer<int>用于简单的任务。
https://stackoverflow.com/questions/35811750
复制相似问题