ある種の高価なオブジェクト(固定サイズではないベクトルとマップを含む)を生成する関数があるので、コピーc'torを呼び出さないようにします。
これまで、メソッドからstd :: shared_ptrを返し、それを使用しましたが、これは醜く、typedeffingを実際に使用できるようにする必要があると思います。
私は私を助けるかもしれない2つのことを知っています。最初にコピーの省略であり、2番目は移動セマンティクスです。
私の問題は、どちらも正しく使用する方法を知っていることです。私の調査によると、コピーの省略は完全にコンパイラーによって行われ、標準の一部ではありません。私は本当にこれだけに頼る必要はありません。
では、move assigmentが呼び出され、コンパイラーがコピーの省略を実行できないようにするために、それを適切に配置するにはどうすればよいですか。
ResultSet &&generateResults()
{
//ResultSet a(); :S
ResultSet a;
a.populat(...
//blah blah blah
return a;
}
//else where (where the && assignment operator is overloaded
ResultsSet b = generateResults();
この場合、これはこれをコーディングするための最も正しい方法ですか?そうでなければ、どうすればそれを改善できますか。C++0xのみの構成を使用できてうれしいです。
ところで:私のコンパイラはgcc4.6です