C++ 在C+中为类编写副本构造函数+;它有一个包含指针的集合

C++ 在C+中为类编写副本构造函数+;它有一个包含指针的集合,c++,class,object,copy-constructor,C++,Class,Object,Copy Constructor,我知道,如果类有一个指针作为成员,您将使用新数据类型[数据指针指向的大小],但是您是否必须调用new来创建集合本身,然后为集合中的每个指针调用new?任何帮助都将不胜感激。如果有一种方法可以使用标准库算法而不是来实现这一点,那就更好了。你要浅拷贝还是深拷贝 对于浅复制(my_类的两个实例共享相同的T对象),只需以与int成员相同的方式复制集合 对于深度副本(新实例获得其自己的T对象副本),您需要在原始集合中运行,创建一个新的T并将其插入新集合。如果只是T,则集合中的对象将使用new来完成此工作。

我知道,如果类有一个指针作为成员,您将使用
新数据类型[数据指针指向的大小]
,但是您是否必须调用
new
来创建集合本身,然后为集合中的每个指针调用
new
?任何帮助都将不胜感激。如果有一种方法可以使用标准库算法而不是
来实现这一点,那就更好了。你要浅拷贝还是深拷贝

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

对于深度副本(新实例获得其自己的T对象副本),您需要在原始集合中运行,创建一个新的T并将其插入新集合。如果只是T,则集合中的对象将使用new来完成此工作。如果T是基类,则必须添加克隆函数

请注意,集合中有一个指针至少有点不寻常。如果您希望第二种行为(深度复制)使用值而不是指针,那么您可以免费使用它


编辑:请注意,int成员是多余的。一组记录其大小。

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

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

对于深度副本(新实例获得其自己的T对象副本),您需要在原始集合中运行,创建一个新的T并将其插入新集合。如果只是T,则集合中的对象将使用new来完成此工作。如果T是基类,则必须添加克隆函数

请注意,集合中有一个指针至少有点不寻常。如果您希望第二种行为(深度复制)使用值而不是指针,那么您可以免费使用它


编辑:请注意,int成员是多余的。一个集合会记录它的大小。

不,您不应该使用
new
来创建新集合。是的,您必须使用
new
创建进入新集合的每个指针。在使用
for
循环之前,不要尝试使用标准算法进行此操作。不,不应使用
new
进行新设置。是的,您必须使用
new
创建进入新集合的每个指针。在使用
for
循环之前,不要尝试使用标准算法。如果
t
是一个基类,那么使用值而不是指针将为您提供帮助。如果
t
是一个基类,那么使用值而不是指针将为您提供帮助。
my_class(my_class const& other)
: class_set{}, elements_in_set{other.elements_in_set} {
  //don't know how to copy over the set
}