qiu*_*qiu 0 c++ class smart-pointers object unique-ptr
假设我有一个从某些 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)
但是复制向量会产生不必要的开销,因为我已经有了数据。此外,原始向量在堆栈上变得重复并且不执行任何操作。
那么在这种情况下,是否有一些有效的方法将现有对象的所有权传递给类?最好的做法是什么?
这里没有理由使用任何类型的指针,只需将数据移动到位即可。不会发生向量的复制。
class LineChart
{
public:
LineChart(vector data):m_data{std::move(data)}{}
vector<double> m_data;
void plot();
};
LineChart lc {std::move(LineData)};
Run Code Online (Sandbox Code Playgroud)
您也可以直接初始化而不使用LineData变量
LineChart lc {generateData()};
Run Code Online (Sandbox Code Playgroud)
这里std::move没有必要,因为generateData函数的返回值是临时的,会自动移动。
| 归档时间: |
|
| 查看次数: |
113 次 |
| 最近记录: |