问题标签 [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.

0 投票
4 回答
4829 浏览

c++ - 在 C++ 中编写复制构造函数和赋值运算符的清单

请写一个副本构造函数和赋值运算符在 C++ 中需要执行的任务列表,以保持异常安全,避免内存泄漏等。

0 投票
3 回答
5292 浏览

matlab - Matlab复制构造函数

除了添加带有一个输入的构造函数并显式复制其属性之外,是否有更好的方法来为句柄派生类实现 matlab 的复制构造?

等等

谢谢,丹妮

0 投票
7 回答
151539 浏览

c++ - 动态分配对象数组

我有一个包含动态分配数组的类,比如说

但现在我想为这些类创建一个动态分配的数组。这是我当前的代码:

但这炸得太厉害了。因为当循环迭代完成时(通过调用)创建的新A对象A(3)被破坏for,这意味着该myArray实例A的内部被delete []-ed。

所以我认为我的语法一定是非常错误的?我想有一些修复看起来有点矫枉过正,我希望避免:

  • A.
  • 使用vector<int>vector<A>所以我不必担心这一切。
  • 与其arrayOfAs成为一个A对象数组,不如让它成为一个A*指针数组。

我认为这只是一些初学者的事情,其中​​有一种语法在尝试动态分配具有内部动态分配的事物数组时实际上有效。

(此外,风格批评很受欢迎,因为我已经有一段时间没有使用 C++ 了。)

未来观众的更新:以下所有答案都非常有帮助。Martin 的被接受是因为示例代码和有用的“4 规则”,但我真的建议阅读它们。有些是错误的简洁陈述,有些则正确地指出了如何以及为什么vectors 是一个好方法。

0 投票
4 回答
2818 浏览

c++ - c++ push_back,非 const 复制构造函数

我有一个类,我想 push_back 到一个双端队列中。问题是当我向后推时,我需要更改原始对象,因此我需要一个非 const 复制 ctor。现在,如果我实现我的 const 复制 ctor 被调用。如果我删除了 const ctor,我会收到一个关于没有可用 ctors 的编译错误。我如何以一种在我传入时可以修改原始结构的方式来实现它?我需要修改它,因为该类在超出范围时会破坏对象,并且我想告诉它在周围有另一个实例时不要这样做。我不能使用 boost,因为我的平台不支持它。

0 投票
5 回答
49892 浏览

c++ - 从函数返回对象时调用C ++中的复制构造函数?

我知道在三个实例上调用了复制构造函数

  1. 当实例化一个对象并使用另一个对象的值对其进行初始化时。
  2. 按值传递对象时。

3. 当一个对象按值从函数中返回时。

如果在返回对象值时调用复制构造函数,我对 no.3 有疑问,如果在函数中本地声明对象,它是否会产生问题。

我的意思是复制构造函数是一个深拷贝,并将对象的引用作为参数

0 投票
4 回答
4228 浏览

c++ - 复制构造函数与返回值优化

上一个问题中,一个普通的按值返回函数似乎总是将其return参数复制到从它分配的变量中。

这是标准要求的,还是可以通过在函数体内构造“分配给”变量来优化函数?

0 投票
2 回答
513 浏览

visual-studio-2008 - VC2008中的自动指针构造函数

我有一个自动指针实现:

这在 Visual C++ 6 中运行良好。但是在 Visual C++ 2005 或 2008 中,我无法从函数返回自动指针,而不会出现严重错误。

例如

发生的情况是编译器创建一个临时 GAutoString 来保存函数的返回值,然后在将它传递给堆栈上的变量“a”时调用临时变量的运算符 T*(),然后调用 GAutoPtr( T *ptr = 0) 构造函数,而不是仅仅使用复制构造函数:GAutoPtr(AutoPtrRef p)

这会导致 temp auto ptr 删除内存,并且 'a' 持有指向已释放内存的指针。

但是在 VC6 中,它确实调用了正确的构造函数。现在说这一切,我也在 Linux 和 Mac 上使用 gcc,所以我写的任何代码也需要在那里工作。VC2008 阻止您在复制构造函数中使用非常量值变量。另外我也不想要“const”,因为复制构造函数获取内存块的所有权,这会从被复制的对象中删除所有权......从而修改它。

如何在 VC 2005/2008 中完成这项工作?

0 投票
8 回答
22676 浏览

c++ - 复制构造函数初始化列表

我知道,如果您在无参数构造函数的初始化列表中留下一个成员,则将调用该成员的默认构造函数。

复制构造函数是否同样调用成员的复制构造函数,还是它们也调用默认构造函数?

0 投票
10 回答
79136 浏览

c++ - 使用指针复制构造函数

我最近发现,当我在一个类中有指针时,我需要指定一个 Copy 构造函数。

为了了解这一点,我编写了以下简单的代码。它可以编译,但在执行复制构造函数时会出现运行时错误。

我试图从复制对象的指针中复制值,但避免分配相同的地址。

那么,这里有什么问题?

我将把这个概念用于其他有很多指针的类,我需要将所有值从一个对象复制到另一个。此代码最初需要复制,因此我想保留复制的可能性(我不会将复制构造函数隐藏为私有)。

此外,我需要实现的真正类有 10 个指针,而且它可能会随着时间而变化。在 C++ 中有没有更聪明的方法来拥有一个深拷贝构造函数?...

0 投票
9 回答
33388 浏览

java - 为什么Java没有复制构造函数?

为什么 Java 不支持 C++ 中的复制构造函数?