我对推荐的编码技术有疑问。我有一个模型分析工具,有时我需要传递大量数据(从工厂类到包含多个异构块的类)。
我的问题是对于我是否应该使用指针或移动所有权是否有一些共识(我需要尽可能避免复制,因为数据块的大小可能高达 1 GB)。
指针版本如下所示:
class FactoryClass {
...
public:
static Data * createData() {
Data * data = new Data;
...
return data;
}
};
class StorageClass {
unique_ptr<Data> data_ptr;
...
public:
void setData(Data * _data_ptr) {
data_ptr.reset(_data_ptr);
}
};
void pass() {
Data * data = FactoryClass::createData();
...
StorageClass storage;
storage.setData(data);
}
而移动版本是这样的:
class FactoryClass {
...
public:
static Data createData() {
Data data;
...
return data;
}
};
class StorageClass {
Data data;
...
public:
void setData(Data _data) {
data = move(_data);
}
};
void pass() {
Data data = FactoryClass::createData();
...
StorageClass storage;
storage.setData(move(data));
}
我更喜欢移动版本 - 是的,我需要在主代码中添加移动命令,但最后我只有存储中的对象,我不必再关心指针语义了。
但是,当使用我不了解的移动语义时,我并不太放松。(不过我不关心 C++11 的要求,因为代码已经只能编译 Gcc4.7+)。
有人会有支持任一版本的参考吗?还是有其他一些如何传递数据的首选版本?
我无法搜索任何内容,因为关键字通常会导致其他主题。
谢谢。
编辑注意:第二个示例被重构以包含评论中的建议,语义保持不变。