正确使用移动语义

问题描述 投票:2回答:1

由于性能原因,我想在这部分代码中使用移动语义:

resultVector.push_back(GetEntry<T>(m, columnIndex, &readData));
delete[] readData.data;

它看起来像这样:

resultVector.push_back(std::move(GetEntry<T>(m, columnIndex, &readData)));
delete[] readData.data;

但我不确定它是否会导致未定义的行为,因为之后的qazxsw poi。

这是delete[] readData.data;函数:

GetEntry
c++
1个回答
7
投票

在这种情况下,没有必要使用template<typename T> T GetEntry(int line, int col, hdfData<T> *hdfData) { int n_max = hdfData->dims[1]; return hdfData->data[n_max * line + col]; } std::move按值返回意味着您对GetEntry的调用将调用rvalue引用重载并自动移动对象。

您需要使用push_back的唯一时间是您明确要移动左值(命名对象)。

© www.soinside.com 2019 - 2024. All rights reserved.