Я недавно написал кусок кода, который сделал
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();
, который также работал нормально.
Теперь я просто не могу понять, почему первый пример потерпел неудачу, а следующие два оказались успешными. Как я понимаю, в первом примере конструктор копирования используется для инициализации результата. Но разве это не так во втором примере? Так почему же второй пример удался? Третий пример имеет немного больше смысла - поскольку const для копирования не используется, мы просто назначаем его после построения.
Короче, в чем разница:
FooClass a = someObject.someMethodReturningFooClassInstance();
и
FooClass a(someObject.someMethodReturningFooClassInstance());?
Мухос, спасибо!