2

私の実装では、クラスのベクトルがあります。各クラス内にはunique_ptr、リンクされたリストへのリンクがあります。各リンク リストに追加する必要があるノードの数を知ることができるのは、実行時だけです。リンクされたリストの中には、ノードがゼロの場合があります。私のクラスの簡略図は次のとおりです。

class A
{
private:
    ...
    std::unique_ptr< std::list<MyListElement> > ptrList;
    ...

public:
    ...
};

のおかげでunique_ptr、最初に copy-constructor と copy-assignment-operator を宣言して に設定し= delete、次に default-constructor、move-constructor、および move-assignment-operator の定義を提供するという面倒な手順を踏まなければなりませんでした。これで、各オブジェクトのリンク リストを初期化する関数を呼び出す準備が整いました。

void A::initListElements(unsigned int numElements)
{
    if (numElements > 0)
    {
        std::unique_ptr< std::list<MyListElement> > tmp(new std::list<MyListElement>);
        ptrList = std::move(tmp);
    }
    else
    {
        ptrList = 0;
    }
}

これは正しい方法ですか?一時的な unique_ptr 'tmp' の作成を避ける方法はありますか?

4

1 に答える 1

4

resetメソッドで一時的に回避できます

ptrList.reset(new std::list<MyListElement>);

elseそして、あなたは声明を必要としないと私は信じています。

于 2013-10-21T13:29:23.717 に答える