作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我对 C++ 中的复制构造函数行为有疑问。我有一个结构如下:
struct Vec4
{
public:
float elems[4];
};
现在如果我做类似的事情:
Vec4 copied = some_func(); // returns a Vec4 object
这会执行 elms 数组的深拷贝还是只拷贝指针地址?我认为应该是后者,应该提供显式复制构造函数和赋值运算符,但我不确定。
我做了一个小测试,它做了它应该做的,但我不确定这是否只是一个意外!
最佳答案
是的,elems
是 Vec4
对象的子对象,因此它与 Vec4
一起被复制。没有要复制的指针。数组元素直接嵌入到 Vec4
对象中。
我发现术语深拷贝和浅拷贝在 C 和 C++ 中有点误导。我认为更好的思考方式是默认拷贝不会遵循任何间接级别(例如指针)。你可以有一个非常“深”的对象(很多子对象的子对象等等),其中不涉及间接寻址并且仍然会复制整个对象,但我们仍然称其为“浅拷贝”。如果您需要遵循任何间接寻址,则需要实现执行“深层复制”的自定义复制构造函数。
关于c++ - 在结构 : Do arrays get copied 中复制构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27526169/
我是一名优秀的程序员,十分优秀!