在 C++ 中为 class 编写一个复制构造函数,它有一个包含指针的集合

Writing a copy constructor for a class in C++ that has a set containing pointers

假设您在 C++ 中有一个 class,如下所示:

template<typename T>
class my_class {
public:
private:
  std::set<T*> class_set;
  int elements_in_set;
}

我正在尝试为此 class 编写一个复制构造函数,到目前为止我还停留在下面,我只知道如何复制整数 elements_in_set,但是我不确定如何复制集合,以及对其他 class_set 的指针指向的内容进行深度复制:

my_class(my_class const& other)
: class_set{}, elements_in_set{other.elements_in_set} {
  //don't know how to copy over the set
}

我知道如果 class 有一个指针作为成员,你会使用 new data type[size of data pointer points to],但是你是否必须调用 new 来创建集合本身,并且然后 new 为集合中的每个指针?任何帮助将不胜感激。如果有一种方法可以使用标准库算法而不是 for 循环来做到这一点,那就太好了。

视情况而定。你想要浅拷贝还是深拷贝?

对于浅拷贝(my_class 的两个实例共享相同的 T 对象)只需以与 int 成员相同的方式复制集合。

对于深拷贝(新实例获取自己的 T 对象副本),您需要 运行 通过原始集合,创建一个新 T 并将其插入到新集合中。如果它只是集合中的 T 个对象,则使用 new 将完成这项工作。如果 T 是一个 base-class 你将不得不添加一个克隆函数。

请注意,在集合中有一个指针至少有点不寻常。如果您想要使用值而不是指针的第二种行为(深层复制),则可以免费获得。

编辑:请注意,您的 int 成员是多余的。集合跟踪其大小。