Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/155.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么你想要一份浅显的副本(而不是参考)?_C++_Copy Constructor - Fatal编程技术网

C++ 为什么你想要一份浅显的副本(而不是参考)?

C++ 为什么你想要一份浅显的副本(而不是参考)?,c++,copy-constructor,C++,Copy Constructor,一直在用boost的。它有一个复制构造函数。据我所知,它使用在构造函数调用期间移交的指针来访问它的数据,并且它本身不管理内存分配。因此,在进行复制时,不会复制实际数据(与复制std::vector时不同)。您会得到两个看似独立的实例(因为您没有使用引用),它们访问和修改相同的数据。这似乎是偶然的,用例也不清楚 所以问题是,为什么你会说不相交集的复制构造函数很有用,为什么你会创建一个复制构造函数来返回实例的浅层副本?你是说:内联不相交集(const self&c):秩(c.rank),父(c.pa

一直在用boost的。它有一个复制构造函数。据我所知,它使用在构造函数调用期间移交的指针来访问它的数据,并且它本身不管理内存分配。因此,在进行复制时,不会复制实际数据(与复制
std::vector
时不同)。您会得到两个看似独立的实例(因为您没有使用引用),它们访问和修改相同的数据。这似乎是偶然的,用例也不清楚


所以问题是,为什么你会说
不相交集的复制构造函数很有用,为什么你会创建一个复制构造函数来返回实例的浅层副本?

你是说:
内联不相交集(const self&c):秩(c.rank),父(c.parent){}/code>?这里不清楚它是浅拷贝还是深拷贝。rank和parent属于模板类型:类RankPA、类ParentPA,所以复制是浅复制还是深复制取决于此模板的客户端

为什么要创建一个副本构造函数来返回实例的浅层副本


<>当你动态分配内存时,它是危险的,而你可能会考虑使用移动语义。 你想要一个关于
不相交集的答案,还是一般的答案?@SingerOfTheFall这是两个密切相关的东西?难道
内联不相交集(const self&c):秩(c.rank),父(c.parent){}
浅层复制的定义,因为它依赖于类型来拥有自己的复制构造函数?如何使用它来启用深度复制?通常情况下,我们使用它,就像在报告中建议的那样<代码>boost::不相交的_集ds(rank.data(),parent.data());//rank和parent是std::vector
@zehelvion如果必须使用
int*
作为此类的模板类型,那么它肯定是浅拷贝,但也许您可以编写一个包装器类型,作为
int*
并允许深度拷贝。我想不相交集合的编写者把它留给了用户,以确保这个构造函数被安全使用。@NathanOliver我想在它被实例化之前,你无法判断这个构造函数是浅拷贝还是深拷贝。是的,我想,考虑到运算符重载。所以基本上,它是由你来做的东西,行为像一个指针,但不深度复制。