首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >qt设计中c++类指针成员的正确设计

qt设计中c++类指针成员的正确设计
EN

Stack Overflow用户
提问于 2016-03-05 16:10:41
回答 2查看 425关注 0票数 0

我想用qt设计模式在c++中设计和编写一个类。在我的原始类中,我只有一个从QSharedData继承的名为MyClassData的数据成员,以及一些成员函数。现在我的问题是,如果MyClassData包含指针,我应该如何在那个类中定义这个指针?

以下代码将解决我的问题:

代码语言:javascript
复制
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;
}

如果我的问题不会结束,我想问一下,通常避免在类的成员字段中定义指针是正确的吗?

EN

回答 2

Stack Overflow用户

发布于 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*。如果它是动态分配的,请查看这些智能指针,无论是QSharedPointerQScopedPointer,还是std::shared_ptrstd::unique_ptr

看看std::unique_ptrstd::shared_ptr是如何使用的,它们非常相似。

票数 1
EN

Stack Overflow用户

发布于 2016-03-05 16:36:18

如果你打算保持你的类的Qt设计风格,你必须在QSharedPointer<int> myQSharedPointerQScopedPointer<int> myQScopedPointer之间做出选择。不同的是,QSharedPointer<int>QScopedPointer<int>更复杂,提供了线程安全性和更多的调试信息。QScopedPointer<int>用于简单的任务。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35811750

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档