问题标签 [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 投票
8 回答
707 浏览

c++ - 为什么在此代码中使用复制 ctor?

执行此代码给出 o/p:

A::A(int), n_=10
A::A(int), n_=20

显然复制构造函数永远不会被调用。

但是,如果我们将其设为私有,则会发生此编译错误:

Test.cpp:在函数'int main()'中:
Test.cpp:21:错误:'A :: A(const A&)'是私有
Test.cpp:38:错误:在此上下文中

为什么编译器在实际不使用复制构造函数时会抱怨?
我正在使用 gcc 版本 4.1.2 20070925 (Red Hat 4.1.2-33)

0 投票
6 回答
8871 浏览

c++ - C++:多态复制构造函数可以工作吗?

考虑:

如果“new A( b1)”能够解决创建新的 B 副本并返回 A , C++ 会被破坏吗?

这甚至会有用吗?

0 投票
6 回答
339 浏览

c++ - 我可以通过使用参数构造基对象来从派生类创建对象吗?

换句话说,给定一个基类shape和一个派生类rectangle

我想知道我是否可以rectangle通过调用创建一个实例:

以及如何实现复制构造函数,以便rectangle通过调用获得新的:

0 投票
1 回答
842 浏览

c++-cli - C++/CLI 混合模式下的 AutoPtr

我有一个围绕原生 .lib 和 .h 文件的 C++/CLI 包装器。我在包装类中广泛使用 AutoPtr 类来管理我为包装创建的非托管对象。我遇到了复制构造函数/赋值运算符的障碍。

使用 Kerr 先生的 AutoPtr 类:http ://weblogs.asp.net/kennykerr/archive/2007/03/26/AutoPtr.aspx

他建议以下(在评论中)重新创建赋值运算符的行为:

我相信这是真的。但是当我编译我的代码时:

-- 我收到以下错误:

错误 C2662:“WrapTest::AutoPtr::GetPointer”:无法将“this”指针从“const WrapTest::AutoPtr”转换为“WrapTest::AutoPtr %”

有没有人遇到过类似的问题?


有关答案的更多背景信息,我从签名中删除了“const”关键字。我知道在复制 ctor 的代码正确性方面并没有笑,但 CLR 根本不喜欢它——有点掩盖了 CLR 的核心与内存管理。

我想知道是否可以将 const 留在签名中,然后使用 GCHandle 或 pin_ptr 确保在执行复制时内存不会移动?

0 投票
5 回答
1984 浏览

c++ - 为什么 C++ 不允许复制 ctor 中的非 const 到 const 转换?

我有两个吸气剂成员:

请注意缺少 const 标识符(我忘记了,但现在我想知道为什么这不起作用)。我试图让它编译:

编译器拒绝这个。我认为 C++ 允许在函数参数中进行非 const 到 const 的转换,例如:

为什么它不让我用复制构造函数做同样的事情?const 标识符意味着我保证不会更改任何内容,那么如果我从 const 或非 const 源获取我的值又有什么关系呢?

0 投票
2 回答
3364 浏览

c++ - 模板复制构造函数因特定模板类型而失败

由于我的一些代码需要在不同类型的矩阵之间进行隐式转换(例如Matrix<int>to Matrix<double>),我定义了一个模板化的复制构造函数Matrix<T>::Matrix(Matrix<U> const&)而不是标准的Matrix<T>::Matrix(Matrix<T> const&)

通过将适当的类型转换添加到复制构造函数中,此方法可以在不同类型的矩阵之间完美地转换。令人惊讶的是,在简单的复制构造函数可以运行的情况下,它会因 malloc 错误而失败: where U == T。果然,使用默认Matrix<T>::Matrix(Matrix<T> const&)签名重载复制构造函数可以解决问题。

这是一个糟糕的解决方案,因为它会导致复制构造器代码的大量复制(字面意思是未更改的复制和粘贴)。更重要的是,我不明白为什么malloc没有重复代码会出现双释放错误。此外,为什么这里需要非常冗长的template <typename T> template <typename U>语法而不是标准的语法,而且更简洁,template <typename T, typename U>

模板化方法的完整源代码,在 Mac OS 10.5 上使用 G++ v4.0.1 编译。

0 投票
3 回答
3483 浏览

c++ - stl vector.push_back() 抽象类无法编译

假设我有一个包含类类型“xx”的 stl 向量。xx 是抽象的。当我执行以下操作时,我遇到了编译器不允许我“实例化”的问题:

我认为这是因为必须调用复制构造函数。我通过将 xx* 存储在向量中而不是 xx 中解决了这个问题。有更好的解决方案吗?它是什么?

0 投票
3 回答
892 浏览

c++ - 复制构造函数的参数选择

我最近在一次采访中被问及复制构造函数的参数。
[已编辑] 作为实现复制构造函数功能的 C++ 语言的设计者,为什么要选择常量引用参数而不是指向 const 对象的 const 指针。

我有一些想法,比如可以将指针分配给 NULL ,这在复制构造函数中可能没有意义(语义上)以及指针变量是一个独立对象的事实(这在效率方面可能不好)而引用只是实际对象的别名(因此是传递对象的更好方法)。
还有其他想法吗?

0 投票
6 回答
3815 浏览

c++ - 这是好代码吗?(复制构造函数和赋值运算符)

出于某种原因,我不得不为我的类同时提供一个复制构造函数和一个 operator=。operator=如果我定义了一个复制 ctor,我想我不需要,但QList想要一个。撇开这一点不谈,我讨厌代码重复,那么这样做有什么问题吗?

只是出于好奇,没有办法切换它,以便大部分代码都在复制 ctor 中并operator=以某种方式利用它?我试过return Fixture(f);了,但它不喜欢那样。


看来我需要更清楚地说明,复制构造函数和赋值运算符已被我继承的类隐式禁用。为什么?因为它是一个不应该单独实例化的抽象基类。然而,这个类独立的。

0 投票
4 回答
6459 浏览

c++ - 减少 operator= 和复制构造函数之间的代码重复

我有一个需要非默认复制构造函数和赋值运算符的类(它包含指针列表)。有没有什么通用的方法可以减少复制构造函数和赋值运算符之间的代码重复?