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
}