私は最近、
SomeClass someObject;
mysqlpp::StoreQueryResult result = someObject.getResult();
SomeClass :: getResult()は次のようになります。
mysqlpp::StoreQueryResult SomeClass::getResult()
{
mysqlpp::StoreQueryResult res = ...<something>...;
return res;
}
ここで、最初のコードスニペットの例を使用して、コンパイルして実行すると、プログラムがABORTシグナルでクラッシュしました。次に、最初のスニペットを次のように変更しました。
SomeClass someObject;
mysqlpp::StoreQueryResult result(someObject.getResult());
うまくいきました。また、試してみるために、もう一度次のように変更しました。
SomeClass someObject;
mysqlpp::StoreQueryResult result;
result = someObject.getResult();
これもうまくいきました。
さて、最初の例が失敗し、次の2つが成功した理由がわかりません。私が理解しているように、最初の例では、コピーコンストラクターを使用して結果を初期化します。しかし、これは2番目の例にも当てはまりませんか?では、なぜ2番目の例が成功したのでしょうか。3番目の例は、もう少し意味があります。copyconstは使用されていないため、構築後に割り当てるだけです。
要するに、次の違いは何ですか?
FooClass a = someObject.someMethodReturningFooClassInstance();
と
FooClass a(someObject.someMethodReturningFooClassInstance());?
ムチョスありがとう!