c++ 为什么shared_ptr不允许直接分配

所以当使用shared_ptr< Type>你可以写:

shared_ptr<Type> var(new Type());

我不知道为什么他们不允许更简单和更好(imo):

shared_ptr<Type> var = new Type();

您需要使用.reset():实现此类功能

shared_ptr<Type> var;
var.reset(new Type());

我习惯了OpenCV Ptr类,这是一个智能指针,允许直接分配和一切正常

允许将原始指针隐式转换为std :: shared_ptr的问题可以用于演示

void foo(std::shared_ptr<int> bar) { /*do something, doesn't matter what*/ }

int main()
{
    int * bar = new int(10);
    foo(bar);
    std::cout << *bar;
}

现在如果隐式转换工作的内存条指向将被foo()末尾的shared_ptr析构函数删除.当我们去std :: cout<<<< *酒吧;我们现在具有未定义的行为,因为我们正在取消引用已删除的指针. 在您的情况下,您直接在调用站点创建指针,因此无关紧要,但从示例中可以看出可能会导致问题.

翻译自:https://stackoverflow.com/questions/37275566/why-doesnt-shared-ptr-permit-direct-assignment

转载注明原文:c++ 为什么shared_ptr不允许直接分配