问题标签 [default-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 投票
1 回答
32 浏览

c++ - 使用声明和参数转发构造函数隐式复制结构

我想让一个结构用转发参数初始化它的成员。除非我声明析构函数以及尝试从函数返回结构(我认为这需要复制构造函数),否则它可以编译并正常工作。

编译器错误是:

看起来它正在尝试为它生成一个复制构造函数FooContainer但失败了,因为它没有办法初始化 Foo。然而,如果我删除FooContainer构造函数或析构函数,它编译得很好。*为什么要这样做?

*无论如何,在http://cpp.sh/上使用 GCC 4.9.2。即使未声明析构函数,Ubuntu 上的 g++ 4.4.3 也会出现相同的错误。

0 投票
1 回答
113 浏览

c++ - 构造所有基类都不需要默认生成的构造函数吗?

我遇到过类型安全的 c++ 产生不匹配的 ctor/dtors 的情况。以下代码为 A 生成了两个构造函数。默认构造函数也构造了它的基 (B),但默认生成的复制/移动 ctor 不构造 B。后来,它破坏了 B,所以我们得到不匹配的 ctor/dtor。

我已经用 gcc 和 clang 尝试过,但都失败了。在 gcc 错误报告论坛中,他们建议这不是 gcc 问题。我可能遗漏了一些东西,但是当类型安全代码导致对尚未构造的类的 dtor 调用时,难道没有什么奇怪的吗?

程序输出:

代码如下:

0 投票
1 回答
510 浏览

c++11 - 显式声明析构函数的隐式生成构造函数

问题是,第 4 版 C++ 编程语言说:

在这种特殊情况下,如果您忘记删除复制或移动操作,也不会造成任何伤害。对于用户已显式声明析构函数的类,不会隐式生成移动操作。 此外,在这种情况下不推荐生成复制操作(第 44.2.3 节)。这可能是显式定义析构函数的一个很好的理由,即使编译器会隐式提供一个析构函数(第 17.2.3 节)。

我试过这段代码:

并且这里没有错误和例外。我知道应该在 c++98 中隐式生成复制构造函数,但是 4th 说不推荐使用复制。这是什么意思?

0 投票
0 回答
287 浏览

c++-cli - 使用 gcnew 作为复制构造函数

我知道那gcnew是用来分配托管内存的。我也没有找到任何System::String(System::String ^)构造函数。通常如果你想复制一个System::String类,你会使用类似的东西

但是这个呢?

0 投票
1 回答
101 浏览

c++ - 2个默认的复制构造函数:有可能吗?

下面的程序格式不正确吗?

它使用clang++ 3.8.0g++ 6.3.0成功编译(编译器标志为-std=c++11 -Wall -Wextra -Werror -pedantic-errors)。

0 投票
1 回答
210 浏览

c++ - 如何测量 C++ 中默认复制构造函数的性能

我想知道我的程序在特定类的默认复制构造函数中花费了多少时间。有没有办法以与编译器实现默认复制构造函数的方式相同的方式实现复制构造函数,但添加了一些检测代码,用于在运行主体之前和之后检查当前时间构造函数?

0 投票
0 回答
415 浏览

c++ - 复制构造函数被隐式删除,因为默认定义格式错误

我正在开始用 C++ 构建一个伯克利模拟。我不断收到此错误,但我不明白它的含义。我在互联网上查了一下,它说如果我没有默认构造函数就会出现问题。但我在所有课程中都有一个。当我将channel变量添加到TimeSlave. 可以请人帮忙吗?

错误是:

并且有一条注释说复制构造函数被隐式删除,因为默认值格式错误...

TimeSlave 类:

课堂频道:

类管道:

0 投票
2 回答
94 浏览

c++ - 仅制作 const 对象的 const 副本

我有一个包含引用的类,例如:

有时 b 必须是只读的,有时它是可写的。当我制作一个const A a(b);对象时,很明显我想将其中的数据保护为const. 但是 - 偶然 - 制作对象的非常量副本很容易,这会使其中的数据易受攻击。

我认为我应该以某种方式防止对象的副本是const这样的:

这可能吗?

0 投票
1 回答
74 浏览

c++ - 默认 operator= 在 C++ 中如何工作?

我很难理解默认的复制构造函数和默认的 operator= 如何在 C++ 中工作。

在下面的程序中,我不明白为什么最后一行会c0 = b2; cout <<endl;打印出来32944

- 如果已定义,operator= 是否调用复制构造函数?如果不是,它的行为如何?在这种情况下,似乎 b0 在分配给 c0 时使用了复制构造函数:

C(const B& x) : B(x), a(1){z=0; cout <<"9";}

- 该语句如何c0 = b2;使用 A 类的 operator=(结果末尾的 44)?

0 投票
1 回答
50 浏览

c++ - 涉及默认复制构造函数的代码应该有段错误,但工作得很好

我正在做一个小实验,以更好地理解构造函数/析构函数何时被隐式调用,我发现了一些非常奇怪的东西。

以下代码在调用时调用默认的复制构造函数myFunction()。在退出 myFunction() 的范围之前,我的用户定义~myClass()被调用,它应该调用free()on dangerData。但是,这似乎并没有释放dangerData

这段代码的输出是:

对析构函数的第一次调用肯定是调用free()malloc 的数组,但是对m.msg()in的调用main()仍然可以在没有段错误的情况下访问它!

这应该发生吗?