之后填充std :: unique_ptr

Jan*_*egg 3 c++ memory memory-management unique-ptr c++11

我有一个函数,它获取指针指针,并填入值:

void GetSensor(Sensor **sensor);
Run Code Online (Sandbox Code Playgroud)

通常,我必须这样做来创建传感器并释放它:

Sensor *sensor;
GetSensor(&sensor);
// Do something with the sensor
delete sensor;
Run Code Online (Sandbox Code Playgroud)

现在我想使用std :: unique_ptr执行相同的任务.我知道我可以这样做:

std::unique_ptr<Sensor> safe_sensor;
Sensor *sensor;
GetSensor(&sensor);
safe_sensor.reset(sensor);
// Do something with the sensor
// safe_sensor will free the sensor pointer
Run Code Online (Sandbox Code Playgroud)

我可以以某种方式避免使用临时传感器变量的步骤吗?这会有用吗?

std::unique_ptr<Sensor> safe_sensor;
GetSensor(&safe_sensor.get());
// Do something with the sensor
// Will the free work correctly here?
Run Code Online (Sandbox Code Playgroud)

Jar*_*d42 7

最简单的方法是将代码包装到函数中:

std::unique_ptr<Sensor> make_safe_sensor()
{
    Sensor *sensor;
    GetSensor(&sensor);
    return std::unique_ptr<Sensor>(sensor);
}
Run Code Online (Sandbox Code Playgroud)

std::unique_ptr 不允许访问其拥有指针的引用.