3

理解します:

shared_ptr<X> x = make_shared<X>();

次のものよりも効率的です。

shared_ptr<X> x(new X());

とメリットを理解しています。ただし、コンパイラが次のようなルールを持てなかった理由がわかりません

"宣言 new()と同じ行にある場合は、 "shared_ptrmake_shared

では、コンパイラが自動的に使用するのを止めmake_shared、代わりにそれを指定する必要があるのは何ですか?

4

1 に答える 1

1

それはおそらく可能ですが、タイピングを節約するためだけに別の特別なルールを追加することは効果的ではなく、c++ の哲学ではありません。テンプレートで完了です。それがコア言語に入った場合、それは永久にそこにあります。

また、入力をあまり節約できないことにも注意してください。

auto x = make_shared<X>()shared_ptr<X> x(new X())

また、shared_ptrコンストラクターの13個の(私が思うに)オーバーロードの1つだけを置き換えるため、「もしnew()共有ポインターが使用される場合」よりも複雑になります。ルールは間違いなく、すでに十分に大きい標準のページ長になります。使用するだけで、追加のルールは必要ありません。make_sharedmake_sharedmake_shared

于 2014-07-28T09:15:40.987 に答える