あなたが間違っているデフォルトに戻築します。
-
01-07-2019 - |
質問
ることもあって、以下のコード:
class some_class{};
some_class some_function()
{
return some_class();
}
このうっと保存のトラブルを気にすることを宣言する変数を作るには、aを返します。とは言えないように思いをたのしくやっていましたことはどのようなチュートリアルまたは参考値です。このコンパイラ特有のもふもふをご堪能ください(visual C++)?※この記事のオリジナルはこうかな?
解決
ないことは完全に有効になります。これをより効率的にコンパイラが実際にできる最適な離れの一時的なものです。
他のヒント
還元物体から機能を呼び出しは、"工場"デザインパターンで広く使用されています。
しかし、注意するかどうかを返しオブジェクトまたはポインタをオブジェクト。前のことですので紹介しておきましょう。にコピーコンストラクタ/課題事業者となりうることが痛みました。
有効ですが、性能に行く時は必ずここに泊い方によって呼び出されます。
例えば:
A a;
a = fn();
や
A a = fn();
は同じではありません。
最初の場合のデフォルトのコンストラクタが呼び出され、その後、代入演算子が呼び出され、必要とする一時的な変数を作成することができます。
後者の場合は、コピーコンストラクタを使用します。
知的なコンパイラはどのような動作するように、最適化が可能です。でも、そのコピーコンストラクタユーザーに供給していかにコンパイラの最適化を臨時に変更します。この呼び出しにコピーコンストラクタ、そして別のインスタンス.
の違いRob Walkerの例と呼び戻り値最適化(RVO)したい場合はgoogleです。
ちなみに、たい場合にはenure御オブジェクトが返される最も効率的な方法で作成したものをオブジェクトのヒープ(ie(新)をshared_ptrして返しshared_ptrです。のポインタを返されたものを、参照カウントを修正。
とすることは極めて適切ではあるがC++.
これは完全に法的なC++コンパイラを受け入れるべきです。こういうのって何かをするのは間違いだったのか?
それは最高について教えてくださいごのクラスは軽量-というわけではなくコピーします。
とはいえ、そのメソッドではないがって作成された一時オブジェクトができるようにコンパイラの最適化。
超重量級の授業にしたいくにコピーされませんが(例えば、大きなビットマップイメージ)しているパれるというような周辺参考としてパラメータを取得し、演題が受付されていないかを必ず確認することもありません一時オブジェクトを作成します。
全体で起こる構文の簡素化とものづくりがより直接的で副作用をより一時オブジェクトを表現かうよう設計時におけるインタフェースをより重量級のオブジェクト。