标题中的QScopedPointer声明,src中的定义

时间:2017-03-28 21:25:21

标签: qt

你能在标题中声明一个QScopedPointer:

QScopedPointer <T> _name;

在.cpp定义/实例化中:

_name ( /*new T*/ );

注意:我知道QScopedPointer没有运营商这样做,只有一个ctor,但从概念上讲,这可以以某种方式实现吗?

1 个答案:

答案 0 :(得分:1)

  

我们可以在标题中使用QScopedPointer<T>类型的类成员吗?   班级宣言?

是。确保定义或声明类型T

///
/// File MyClass.h
///

// Either have:
#include "MyType.h" // defines MyType

// Or:
class MyType; // forward declaraion

class MyClass
{
public:
    MyClass();
    ////
private:
    QScopedPointer<MyType> m_pTypeObj;
};

但是你应该总是在实例化对象的地方定义类型,并将指针存储在QScopedPointer<MyType>中:

#include "MyClass.h" // defines MyClass
// If not through MyClass.h then must have:
#include "MyType.h"  // defines MyType

MyClass::MyClass()
{
    // now we can instantiate MyType
    m_pTypeObj.reset(new MyType);
    // and use the scoped pointer
    m_pTypeObj->method();
}

或者正如作者暗示的那样:

MyClass::MyClass() : m_pTypeObj(new MyType)
{
    // and use the scoped pointer
    m_pTypeObj->method();
}

该方法也适用于std::unique_ptr,现在可以取代QScopedPointer