小编qiu*_*qiu的帖子

如何使用智能指针来管理现有对象

假设我有一个从某些 API 生成的数据向量。它仅用于绘图。

vector<double> LineData = generateData();
Run Code Online (Sandbox Code Playgroud)

我还有一个类可以进行绘图和管理数据

class LineChart
{
public:
    LineChart(vector* data):m_data{data}{}
    vector<double> *m_data;
    void plot();
};

LineChart lc {&LineData}
Run Code Online (Sandbox Code Playgroud)

由于向量仅用于绘图,因此我希望该类拥有完全所有权。所以我想将原始指针更改为 unique_ptr。

通常,unique_ptr 是从 new 或 make_unique 创建的,而不是现有对象。我可以复制该向量,然后将其移至班级。

unique_ptr<vector> data = make_unique<vector>(LineData)
Run Code Online (Sandbox Code Playgroud)

但是复制向量会产生不必要的开销,因为我已经有了数据。此外,原始向量在堆栈上变得重复并且不执行任何操作。

那么在这种情况下,是否有一些有效的方法将现有对象的所有权传递给类?最好的做法是什么?

c++ class smart-pointers object unique-ptr

0
推荐指数
1
解决办法
113
查看次数

标签 统计

c++ ×1

class ×1

object ×1

smart-pointers ×1

unique-ptr ×1