函数是否应该返回指向在堆上分配的内存的指针?
换句话说,以下哪种方法更“正确”?
// Method #1
Object* getObject1() {
return new Object();
}
// Method #2
std::shared_ptr<Object> getObject2() {
return std::make_shared<Object>();
}
int main() {
// Usage of method #1
Object* o1 = getObject1();
o1->doSomething();
delete o1; // object has to be deleted by user
// Usage of method #2
std::shared_ptr<Object>& o2 getObject2(); // has to be kept in shared_ptr
o2.get()->doSomething();
// object is deleted when o2 destructs
}
我想第一种方法可能更快,但第二种方法不需要用户删除对象。
原文由 DutChen18 发布,翻译遵循 CC BY-SA 4.0 许可协议
在这两者中,第二个将是首选。裸指针应该永远是你最后的选择。但理想情况下,您只需按值返回
Object
。如果做不到这一点,除非您确实需要共享所有权,否则unique_ptr
会比shared_ptr
更好。shared_ptr
可能是这样。但是使用unique_ptr
,编译器可以优化。没有任何好处可以补偿您手动删除的风险。