dys*_*oco 3 c++ smart-pointers c++11
给出以下示例代码:
#include <memory>
class Foo {
public:
Foo(std::shared_ptr<int> p);
private:
std::shared_ptr<int> ptr;
};
Foo::Foo(std::shared_ptr<int> p) : ptr(std::move(p)) {
}
class Bar {
public:
Bar(int &p);
private:
std::shared_ptr<int> ptr;
};
Bar::Bar(int &p) : ptr(std::make_shared<int>(p)) {
}
int main() {
Foo foo(std::make_shared<int>(int(256)));
Bar bar(*new int(512));
return 0;
}
Run Code Online (Sandbox Code Playgroud)
Foo和Bar都能正常工作.但是,在调用构造函数时创建shared_ptr然后使用std :: move传递所有权并仅传递对象的引用并将shared_ptr的创建委托给类构造函数之间是否存在任何差异?
我假设第二种方式更好,因为我不必移动指针.但是,我大多数时候都看到了我正在阅读的代码中使用的第一种方式.
我应该使用哪一个?为什么?
Foo是对的.
酒吧是令人厌恶的.它涉及内存泄漏,不安全的异常行为和不必要的副本.
编辑:内存泄漏的解释.
解构这条线:
Bar bar(*new int(512));
Run Code Online (Sandbox Code Playgroud)
导致这些操作:
| 归档时间: |
|
| 查看次数: |
6585 次 |
| 最近记录: |