2

私はC#のバックグラウンドを持っていますが、C++とQtのスマートポインターに頭を悩ませています。これは基本的な質問です。

myClass.hで

QSharedPointer<AccessFlags> m_flags;

myClass.cppで、m_flagsポインターを設定しようとしています(正しい単語が設定されていますか?)

if(m_flags.isNull())
    m_flags = new AccessFlags();


class AccessFlags{
public:
     QHash<QString,int> flags;
     AccessFlags();  //The dictionary is setup in the constructor
};

コンパイラは「'operator='に一致しません。で」と文句を言います。ポインタを設定するにはどうすればよいですか?

4

2 に答える 2

5

QSharedPointer行のaに生のポインタを割り当てようとしています

m_flags = new AccessFlags();

あなたはおそらく次のようなものが欲しいでしょう

m_flags = QSharedPointer<AccessFlags>(new AccessFlags);
于 2012-11-06T02:07:51.110 に答える
5

最新のC++11コンパイラ(GCC4.6以降およびMSVC10.0など)を使用している場合は、QSharedPointerの代わりにstd::shared_ptrを使用することを検討してください。

まず第一に、これは標準であり、第二に、std :: make_sharedを使用してポインターを初期化することができます。これにより、より高速になります。(たとえば、MSVS2010 / 2012では、割り当てはmake_sharedに対して1回だけ発生し、代わりに2つの割り当てが発生します。1つは新規用、もう1つは内部カウンター用です)。

于 2012-11-06T10:40:04.537 に答える