理解します:
shared_ptr<X> x = make_shared<X>();
次のものよりも効率的です。
shared_ptr<X> x(new X());
とメリットを理解しています。ただし、コンパイラが次のようなルールを持てなかった理由がわかりません
"宣言
new()と同じ行にある場合は、 "shared_ptrmake_shared
では、コンパイラが自動的に使用するのを止めmake_shared、代わりにそれを指定する必要があるのは何ですか?
理解します:
shared_ptr<X> x = make_shared<X>();
次のものよりも効率的です。
shared_ptr<X> x(new X());
とメリットを理解しています。ただし、コンパイラが次のようなルールを持てなかった理由がわかりません
"宣言
new()と同じ行にある場合は、 "shared_ptrmake_shared
では、コンパイラが自動的に使用するのを止めmake_shared、代わりにそれを指定する必要があるのは何ですか?
それはおそらく可能ですが、タイピングを節約するためだけに別の特別なルールを追加することは効果的ではなく、c++ の哲学ではありません。テンプレートで完了です。それがコア言語に入った場合、それは永久にそこにあります。
また、入力をあまり節約できないことにも注意してください。
auto x = make_shared<X>()対shared_ptr<X> x(new X())
また、shared_ptrコンストラクターの13個の(私が思うに)オーバーロードの1つだけを置き換えるため、「もしnew()共有ポインターが使用される場合」よりも複雑になります。ルールは間違いなく、すでに十分に大きい標準のページ長になります。使用するだけで、追加のルールは必要ありません。make_sharedmake_sharedmake_shared