0
あなたはQScopedPointerはヘッダで宣言されていることができます:QScopedPointer宣言、SRCで定義
QScopedPointer <T> _name;
とする.cpp定義/インスタンス化で:
_name (/*new T*/);
注:私は承知していますQScopedPointerはこれを行うための演算子を持っていませんが、概念的にはこれは何とか補完できますか?
あなたはQScopedPointerはヘッダで宣言されていることができます:QScopedPointer宣言、SRCで定義
QScopedPointer <T> _name;
とする.cpp定義/インスタンス化で:
_name (/*new T*/);
注:私は承知していますQScopedPointerはこれを行うための演算子を持っていませんが、概念的にはこれは何とか補完できますか?
私たちは クラス宣言をヘッダに
QScopedPointer<T>
-typedクラスのメンバを使用することはできますか?
はい。タイプ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にも適用可能です。
デフォルトのdtorはオブジェクトの定義を必要とするため、最初のサンプルはコンパイルされません。前方宣言でQScopedPointerを使用する場合は、.cppファイルでdtorを定義する必要があります。 –
正しい:*オブジェクトをインスタンス化する場所に常に型を定義する必要があります* – AlexanderVX