我正在阅读Java to C++ crash course,除此之外,它讨论了C++中的内存管理。通过一个实例来展示一下一定不能做的:在C++中,何时可以返回一个类实例?
Foo& FooFactory::createBadFoo(int a, int b)
{
Foo aLocalFooInstance(a, b); // creates a local instance of the class Foo
return aLocalFooInstance; // returns a reference to this instance
}
因为aLocalFooInstance
叶范围和被破坏这是行不通的。很好,对我有意义。现在,作为一个解决这个问题下面的代码给出:
Foo FooFactory::createFoo(int a, int b)
{
return Foo(a, b); // returns an instance of Foo
}
我不明白:为什么是第二个例子有效的C++代码?这两个示例中的基本问题都不一样,即创建了Foo
的实例,它将超出范围,因此在从方法返回时会被销毁?
第一个和第二个示例之间的主要区别是返回类型。第一个返回一个引用,因此该对象本身不会移到一边。第二个返回一个值,并返回对象本身 –