【发布时间】:2020-07-29 16:35:36
【问题描述】:
我有以下简单的代码示例:
#include <iostream>
#include <utility>
#include <memory>
using namespace std;
class resource
{
public:
void print() { cout << "Class Still Alive" << endl; };
};
resource* create_resource()
{
std::unique_ptr<resource> r = std::make_unique<resource>();
return r.get();
}
void execute_resource(resource* r)
{
r->print();
}
int main()
{
resource* r = create_resource();
execute_resource(r);
return 0;
}
在 create_resource 中创建的唯一 ptr r 在函数末尾超出范围。至少这是我对范围的理解。
那么,由唯一指针包裹的实际资源如何仍然可以访问,并且确实会产生分段错误,因为它拥有的唯一指针应该已经超出范围并删除了它?
编译使用:g++ test.cpp -std=c++14
【问题讨论】:
标签: c++ function scope c++14 smart-pointers