我有一個問題,我想在單個容器類中存儲結構向量。利用C++中的移動語義
問題是,當爲這些向量創建這個容器時,我浪費資源,因爲向量被複制;沒有移動。爲什麼臨時返回的資源create()
沒有轉移到主函數中的局部變量master_data
?
示例代碼被呈現以下(並且在coliru HERE):
#include <stdio.h>
#include <vector>
#include <stdlib.h>
// Specific data struct
typedef struct DataA {
DataA(): a(rand()),
b(rand()) {}
int a,b;
} DataA;
// Another specific data struct
typedef struct DataB {
DataB(): c(rand()),
d(rand()) {}
int c,d;
} DataB;
// Container of all relevant data
typedef struct Master {
Master(const std::vector<DataA> &a, const std::vector<DataB> &b) : data_a(std::move(a)), data_b(std::move(b)) {}
Master(const Master &rhs) : data_a(std::move(rhs.data_a)), data_b(std::move(rhs.data_b)) {}
std::vector<DataA> data_a;
std::vector<DataB> data_b;
} Master;
Master create() {
std::vector<DataA> data_a(10);
std::vector<DataB> data_b(10);
printf("data_a address inside create() : %p\n", (void*)data_a.data());
printf("data_b address inside create() : %p\n", (void*)data_b.data());
return {data_a, data_b};
}
int main()
{
Master master_data(create());
printf("data_a address outside create() : %p\n", (void*)master_data.data_a.data());
printf("data_b address outside create() : %p\n", (void*)master_data.data_b.data());
return 0;
}
的概念被稱爲「移動**語義**「,而不是」移動原理圖「。 –
__Paste__你想問的代碼,不要鏈接到它們。還提供[mcve]和明確的問題陳述。 「這有用嗎?」並不是一個明確的問題陳述,「行x是否具有Y的時間複雜性?」是。 –
@PserserBy:我做了編輯改進問題。 – ELEC