【发布时间】:2018-04-08 15:40:05
【问题描述】:
我有以下情况:
我需要从A 类型创建一个变量的深层 (!) 副本。该变量包含一个B 类型的向量。 B 类不可复制,因为它包含一个 std::unordered_map,其值为 unique_ptr(不可复制)。我想避免通过复制构造函数或复制赋值运算符使B 可复制。
一个问题是unique_ptr 的类型只是基本类型。实际对象派生自C,包含不同的成员和不同的构造函数。
class A{
public:
A(const A&); // how should I implement this?
A& operator=(const A&); // how should I implement this?
private:
vector<B> vectorOfB;
}
class B{
private:
std::unordered_map<std::string, std::unique_ptr<C> mapOfDerivedTypesOfC;
}
class C{}
class C_1: public C{
public:
C_1(double x)
}
class C_2: public C{
public:
C_2(double y, double z)
}
背景: A 类的目的是读取大量带有数据的大型文本文件并创建许多对象。 之后我必须使用这些对象运行蒙特卡罗模拟。对于每个模拟,我都需要一个 A 的新副本。 我不想每次都读入所有文本文件,因为这很耗时。因此,有必要对 A 进行深层复制。在一次模拟中,我想避免复制 B,因为复制该对象是没有意义的。我认为使用 sharded_ptr 没有帮助,因为我需要一个深拷贝,并且模拟使用 openMP 并行运行。
编辑: 我认为总体问题是我应该如何复制 unordered_map
【问题讨论】:
-
那么,您的问题到底是什么?
-
B需要被复制,但您不想对其进行复制操作。这有什么意义? -
这个想法是,在一次模拟中,
B不应该被复制。我只需要为每个蒙特卡罗模拟复制A
标签: c++ copy smart-pointers unique-ptr deep-copy