我最近写了一段代码
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());?
多谢!