我有一个问题,我想在单个容器类中存储结构向量。利用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