问题标签 [move-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 投票
0 回答
78 浏览

c++ - 是否有任何理由使用非 noexcept Move 构造函数

在 c++11中使用NON NOEXCEPT移动构造函数有什么实际理由吗?

因为,std::vector如果声明为 ,则使用移动构造函数noexcep,但我无法想象使用非 noexcept 移动构造函数有什么实际意义。

0 投票
1 回答
511 浏览

c++ - C++中有部分复制构造函数吗?

有没有办法在 C++ 中实现复制构造函数,它只复制一些特定的成员并为其他成员实现移动。

例如,我有一堂课

现在假设使用移动构造函数我只想largeArray在两个对象之间保留一个副本,并且使用副本我可以在相同的两个对象之间保留整数 a 的单独副本。

编码时可能会出现这种情况。

任何人都可以分享这方面的想法吗?

0 投票
2 回答
628 浏览

c++ - C++11:不触发移动构造函数

最近一直在研究 C++11 中的移动语义。我印象深刻,迫不及待地想弄脏手并尝试一下。以下是我的代码:

(我从1引用了一些代码)

代码可能看起来很长,但实际上非常幼稚,只是一个转储数组。

在第 67 行,我特意用右值创建了 b,并希望看到移动构造函数是如何被调用的。但令人失望的是,这个程序的输出是:

打印出来的三个地址是一样的,根本没有调用move构造函数!事实上,我后来尝试删除移动构造函数,程序仍然编译并给出了相同的输出!而且如果你仔细看,你会发现构造函数只被调用一次,在构造a的时候。也就是说,在构造 b 时,根本不会调用构造函数,既不移动也不复制!

我真的很困惑。谁能告诉我为什么没有触发移动构造函数,以及究竟 b 是如何构造的?

0 投票
3 回答
1396 浏览

c++ - 显式移动构造函数

尝试编译以下代码:

收到以下错误:

调用 'Foo' 的隐式删除的复制构造函数

好吧,很明显 copy-ctor 被隐式​​删除了。

问题1:为什么编译器需要copy-ctor Foo?我期望 的返回值是用 move-ctor 从右bar值构造的。Foo()

然后我将 move-ctor 重新声明为隐式,一切都成功编译。

问题 2:为什么当我将 move-ctor 重新声明为隐式时,编译器不再需要 copy-ctor?

问题 3:关键字在复制和移动 ctor 的上下文中意味着什么explicit,因为它肯定意味着与常规 ctor 的上下文不同的东西。

0 投票
3 回答
2386 浏览

c++ - 为什么我们需要在移动构造函数中将右值引用设置为 null?

我无法理解设置rhd.pds为的原因nullptr

如果我们删除这一行会发生什么:rhs.pds = nullptr;

0 投票
2 回答
117 浏览

c++ - 抛出异常时是否创建了 std::exception 对象?

我有一个CustomException实现的类std::exception,在其中我明确删除了复制和移动构造函数。当我抛出该类的异常时,调用已删除的构造函数时会出现编译错误。

是否在某处创建了 CustomException 实例?抛出异常时会创建哪些对象?

0 投票
9 回答
388 浏览

c++ - 是否可以在不编写复制构造函数的情况下在 main 中的构造函数之间进行选择?

真实的例子显然要长得多,但这总结了我的问题:

然后主要:

哎呀!那是行不通的,实例超出了后续程序的范围。

但是现在我遇到了麻烦,因为我没有定义复制构造函数。我真的不想写一个复制构造函数,因为我的实际类有几十个成员,其中许多是非基本类型,可能需要更多的工作来复制。

具体来说,我得到

0 投票
3 回答
289 浏览

c++ - C++ 移动构造函数和作用域

如果我在堆栈上声明了一个对象,并且我返回了对它的引用,我相信我将无法再访问它,因为它超出了范围。正确的?

如果我只返回对象本身(不是对它的引用)怎么办?会调用复制构造函数吗?(我听说过“移动构造函数”这个词,但从我读到的,这似乎是一个新功能。有人可以详细说明一下吗?)

在什么情况下会调用析构函数?

0 投票
2 回答
183 浏览

c++ - C++11 隐式移动构造函数

我无法理解为什么以下内容(至少根据 gcc 4.8)在 C++11 中是合法的:

在什么情况下语言允许或实际首选移动构造函数?临时返回值似乎可以移动(和垃圾内容),但我想为所有可以静默使用移动的地方找到核心语言规则。谢谢!

0 投票
1 回答
9911 浏览

c++ - 错误:调用“Cadena”的隐式删除的复制构造函数

当我尝试编译我的代码时,我遇到了下一个错误:

Cadena 中的构造函数是:

和移动构造函数:

usuario.h 中的声明是:

Cadena 类运行良好,但现在我需要使用它,编译器会删除这些错误。我认为我没有做任何特别的事情,只返回/分配一个 Cadena 类型的对象..

我期待你的反馈,

最好的祝福。