你能在标题中声明一个QScopedPointer:
QScopedPointer <T> _name;
在.cpp定义/实例化中:
_name ( /*new T*/ );
注意:我知道QScopedPointer没有运营商这样做,只有一个ctor,但从概念上讲,这可以以某种方式实现吗?
答案 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。