小编Dra*_*ake的帖子

在std :: unique_ptr超出范围后仍可访问对象.不同的运行时行为

下面的代码向函数传递modify_entry一个指向类型对象的指针,Entry并在函数体内部unique_ptr采用原始指针.但是,指针指向的对象似乎在函数返回后仍然存在.

当我编译这段代码

#include <iostream>
#include <memory>

struct Entry {

    Entry(std::string name) : name_(name) { std::cout << "Constructor for " + name_ + '\n'; }
    ~Entry() { std::cout << "Destructor for " + name_ + '\n'; }
    std::string name_;

};

void modify_entry(Entry* e_ptr){

    std::cout << "Inside modify_entry()\n";
    std::unique_ptr<Entry>{e_ptr}->name_ += " Doe";

}

int main(int argc, const char * argv[])
{

    Entry* entry_ptr = new Entry("John");
    modify_entry(entry_ptr);
    std::cout << "Back from modify_entry()\n";
    std::cout << entry_ptr->name_ << …
Run Code Online (Sandbox Code Playgroud)

c++ unique-ptr c++11 dangling-pointer

1
推荐指数
2
解决办法
744
查看次数

标签 统计

c++ ×1

c++11 ×1

dangling-pointer ×1

unique-ptr ×1