2017-03-29 5 views
0

私は本当に必要としており、イニシャライザの参考文献一覧はありますが、不可能と思われます。コピーを作成することの問題は、コピーの作成を無効にしたいということです。これらのコピーは、後でリソースを解放する(そして起こるべきではない)ので、デストラクタを呼び出します。イニシャライザの代替品参考文献一覧

私の現在の(悪い)代替案は、リソースが解放されないようにコピーが構築されたかどうかを追跡するためにブールを使用しています。

ポインタのイニシャライザのリストもありますが、これはもっと冗長で、nullptrを受け入れ、私の意見では概念的に間違っていることになります。

私は本当に参照を使用して、代替またはそれらの線に沿って何かのように(多分私はその仕事をするように見えることはできません?動く)でしょう

+0

実行する方法を示すためのコード例はありますか?私はおそらく 'std :: ref'と' std :: reference_wrapper'を考えていましたが、おそらくそれほど適切ではありません。 –

+0

それは本当にそれを行います!私はstd :: reference_wrapperと次の質問を扱う例を追加しました –

+0

あなたの質問に従うならば、新しい投稿をしてください。これにはいくつかの理由と利点があります。まず、自分の担当者の潜在能力を高めます。非常に具体的な質問とは対照的に、より一般的に有用な質問がいくつかあります。また、既存の回答を不完全なものとしてレンダリングし、修正を加えて、著者が質問と回答のセッションにドラッグするように強制します。 –

答えて

1

私はあなたがAに入れて参照の参照の初期化リストをしたいと仮定コンテナ。だから、参照型を探していますよね?そうであれば、参照ラッパーを確認してください。これは、参照をコンテナの種類にすることができます。

#include <iostream> 
#include <functional> 

struct A { 
    A() { std::cout << "A()" << std::endl; } 
    A(const A&) = delete; 
    ~A() { std::cout << "~A()" << std::endl; } 
}; 

int main(int argc, char const *argv[]) 
{ 
    A a1; 
    A a2; 
    A a3; 

    { 
     // OK: don't call copy constructor during creation 
     std::initializer_list<std::reference_wrapper<A>> ilist{ a1, a2, a3 }; 
     // OK: don't call destructor when "ilist" leaves the scope 
    } 

    { 
     // ERROR: can't create the list because copy constructor is deleted 
     std::initializer_list<A> va{ a1, a2, a3 }; 
    } 


    // Destructors called here 

    return 0; 
} 
+0

それはそうするようです。それは私が "インライン"と呼んだ場合、それはうまくいかないと言っています、それは、それが価値観を使っているか、それとも何かを使っているからですか?私は説明する簡単な例を編集するつもりです –

+0

新しい質問の作成の提案のために私の編集を削除するつもりです –

関連する問題