函数是否应该返回一个“新”对象

新手上路,请多包涵

函数是否应该返回指向在堆上分配的内存的指针?

换句话说,以下哪种方法更“正确”?

 // 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 许可协议

阅读 318
1 个回答

在这两者中,第二个将是首选。裸指针应该永远是你最后的选择。但理想情况下,您只需按值返回 Object 。如果做不到这一点,除非您确实需要共享所有权,否则 unique_ptr 会比 shared_ptr 更好。

我想第一种方法可能更快。

shared_ptr 可能是这样。但是使用 unique_ptr ,编译器可以优化。没有任何好处可以补偿您手动删除的风险。

原文由 David Schwartz 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题