我是一名新手C++程序员,现在遇到了以下问题:
想象你有一个函数,它创建一个新对象并返回该对象。这种情况下最好的方法是什么? 我找到了三种不同的解决方案。
解决方案1 使用拷贝构造函数
MyClass getMyClass() {
MyClass obj;
//work with obj, set values...
return obj;
}
据我所理解,您创建了一个新对象,复制该对象,销毁第一个对象并返回复制的对象。因此,我创建了两个对象,但我只需要一个。是这样吗? 解决方案2:在堆上创建对象并使用指针。
MyClass* getMyClass() {
MyClass* obj = new MyClass();
//work with obj, set values...
return obj;
}
这似乎是最糟糕的解决方案,你必须自己进行内存管理。
解决方案3 将对象作为参数传递
MyClass getMyClass(MyClass& obj) {
//work with obj, set values...
return obj;
}
你需要创建一个默认对象并在函数中设置所有值。
我也考虑过使用
unique_ptr<MyCLass>
,但是有同样的问题,即当函数作用域结束时unique_ptr
会被销毁。
std::shared_ptr
。这三个解决方案都有它们的用例,通常没有一个是更好的选择。 - πάντα ῥεῖunique_ptr
将被销毁,除非你从函数中返回它。unique_ptr
是可移动的。” - Mike Seymour