问题标签 [copy-constructor]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - 复制构造函数和动态分配
我想问你如何为以下类编写一个复制构造函数(和 operator = )。
类 Node 存储每个节点的坐标 x,y 和指向另一个节点的指针。
类 NodesList(继承自 std::vector)存储所有动态分配的节点
主程序:
}
我不想创建每个节点的浅拷贝,而是创建每个节点的深拷贝。我可以问你一个带有复制构造函数的示例代码吗?
每个节点可以被多次指向。让我们有这样的情况,当 3 个节点 n[1]、n[2]、n[3] 存储在 NodesList nl1 中时:
n[1] 指向 n[2]
n[2] 指向 n[3]
n[3] 指向 n[2]
A] 我们的复制构造函数处理节点 n[1]。它创建一个由旧对象 n[1]_old 的副本表示的新对象 n[1]_new。从 n[1]_old 指向的节点 n[2] 仍然不存在,因此还必须创建 n[2]_new... 从 n1_new 指向 n2_new 的指针已设置。
B] 然后处理第二个点n[2]。它不能被创建两次,n[2]_new 是在 A] 中创建的。但是指向的节点 n[3] 不存在,因此创建了新对象 n[3]_new 作为旧对象 n[3]_old 的副本。从 n2_new 到 n3_new 的指针被设置。
C] 节点 n[3]_new 已经创建并且 n[2]_new。从 n3_new 到 n2_new 的指针已设置,不会创建其他对象...
所以复制构造函数应该检查对象是否在过去创建过或者没有...
一些引用计数可能会有所帮助......
c++ - 关于 C++ 中没有默认构造函数的数组的一个问题
从上一篇文章中,我了解到至少有两种方法可以声明一个没有默认构造函数的数组。像这样
我还了解到第一个将直接使用参数构造对象,这里使用第二个复制构造函数。但是,当我测试下面的代码时。我将复制构造函数设为私有。我希望看到复制构造函数用法的不同。但这不是我所期望的。这两个声明都不起作用。
谁能向我解释为什么会发生这种情况?
c++ - 这是一个有效的 Copyctor 吗?
不知道是不是下面的复制构造函数有问题?
language-agnostic - Why are copy constructors unnecessary for immutable objects?
Why are copy constructors unnecessary for immutable objects? Please explain this for me.
java - Clone() vs Copy constructor - 在java中推荐
java中的克隆方法与复制构造函数。哪一个是正确的解决方案。每个案例在哪里使用?
c++ - C ++复制构造构造和分配问题
以下是“C++ Gotchas”一书第 56 项的摘录:
以三种不同方式编写 Y 对象的简单初始化并不少见,就好像它们是等价的一样。
事实上,所有这三个初始化都可能导致生成相同的目标代码,但它们并不等价。a 的初始化被称为直接初始化,它完全符合人们的预期。初始化是通过直接调用 Y::Y(int) 来完成的。
b 和 c 的初始化更复杂。事实上,它们太复杂了。这些都是复制初始化。在初始化 b 的情况下,我们请求创建一个类型为 Y 的匿名临时变量,初始化值为 1066。然后我们使用这个匿名临时变量作为 Y 类的复制构造函数的参数来初始化 b。最后,我们调用匿名临时的析构函数。
为了测试这一点,我做了一个带有数据成员的简单类(最后附加了程序),结果令人惊讶。似乎对于 c 的情况,对象是由复制构造函数构造的,而不是像书中建议的那样。
有谁知道语言标准是否发生了变化,或者这仅仅是编译器的优化功能?我使用的是 Visual Studio 2008。
代码示例:
输出:
我对构建 d 和 e 的结果感到最惊讶。准确地说,我期望创建一个空对象,然后创建一个对象并将其分配给空对象。实际上,对象是由复制构造函数创建的。
c++ - 按地址复制构造函数
我有两个复制构造函数
什么时候会调用第二个复制构造函数?
c++ - 在 STL 向量中存储对象 - 最小的方法集
什么是复杂对象(具有显式分配的内部数据)的“最小框架”(必要方法),我想将其存储在 STL 容器中,例如<vector>
?
对于我的假设(复杂对象 Doit 的示例):
给
在 valgrind 中:
更新:
此类对象的最小方法是:(基于 sbi 答案)
c++ - 标准::字符串 x(x);
这在我的编译器上崩溃得非常严重。这是否意味着我应该this != &that
在自己的复制构造函数中进行测试,或者我可以假设没有客户会如此愚蠢?
c++ - 如何为带有 ptr 的工厂类编写 cctor 和 op= 以抽象成员字段?
我正在将 zip 和 rar 档案中的文件提取到原始缓冲区中。我创建了以下内容来包装 minizip 和 unrarlib:
Archive.hpp - 用于访问所有内容。如果我可以让其他类中的所有功能都无法从外部访问,我会的。(实际上,我想我可以成为 Archive 中所有其他类的朋友,并使用私有函数回调......,但这太迂回了。)
档案库.hpp
ArchiveDerived.hpp "Derived" 是 "Zip" 或 "Rar"
ArchiveDerived.cpp
有人建议我使用这种设计,以便我可以这样做:
如何为存档编写 cctor?
归档的 op= 怎么样?
我能做些什么“重命名”
ArchiveBase::Data
到Archive::Data
?(minizip 和 unrarlib 都使用此类结构进行输入和输出。数据对于 Zip 和 Rar 是通用的,后来用于创建各自库的结构。)其他所有内容都通过 访问Archive
,我想Data
在外部类中声明这种方式也是如此。
我知道我可以将我的 current class Archive
、 nameArchiveBase
扔到Archive
中,并使用全局工厂函数。但是,我想避免使用全局函数。