Dut*_*n18 1 c++ pointers return function heap-memory
应该是一个函数返回指向堆上分配的内存的指针吗?
换句话说,下列哪种方法更"正确"?
// 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
}
Run Code Online (Sandbox Code Playgroud)
我想第一种方法可能更快,但第二种方法不需要用户删除对象.
在这两者中,第二个是首选.裸指针应该永远是你的最后选择.但理想情况下,你只会Object
按价值回报.如果做不到这一点,除非你确实需要共享所有权,否则unique_ptr
会比a更好shared_ptr
.
我想第一种方法可能更快.
这可能是真的shared_ptr
.但是unique_ptr
,编译器可以优化.由于手动删除的风险,没有任何好处可以帮助您.
归档时间: |
|
查看次数: |
5759 次 |
最近记录: |