问题标签 [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.
c++ - 是否有任何理由使用非 noexcept Move 构造函数
在 c++11中使用NON NOEXCEPT移动构造函数有什么实际理由吗?
因为,std::vector
如果声明为 ,则使用移动构造函数noexcep
,但我无法想象使用非 noexcept 移动构造函数有什么实际意义。
c++ - C++中有部分复制构造函数吗?
有没有办法在 C++ 中实现复制构造函数,它只复制一些特定的成员并为其他成员实现移动。
例如,我有一堂课
现在假设使用移动构造函数我只想largeArray
在两个对象之间保留一个副本,并且使用副本我可以在相同的两个对象之间保留整数 a 的单独副本。
编码时可能会出现这种情况。
任何人都可以分享这方面的想法吗?
c++ - C++11:不触发移动构造函数
最近一直在研究 C++11 中的移动语义。我印象深刻,迫不及待地想弄脏手并尝试一下。以下是我的代码:
(我从1引用了一些代码)
代码可能看起来很长,但实际上非常幼稚,只是一个转储数组。
在第 67 行,我特意用右值创建了 b,并希望看到移动构造函数是如何被调用的。但令人失望的是,这个程序的输出是:
打印出来的三个地址是一样的,根本没有调用move构造函数!事实上,我后来尝试删除移动构造函数,程序仍然编译并给出了相同的输出!而且如果你仔细看,你会发现构造函数只被调用一次,在构造a的时候。也就是说,在构造 b 时,根本不会调用构造函数,既不移动也不复制!
我真的很困惑。谁能告诉我为什么没有触发移动构造函数,以及究竟 b 是如何构造的?
c++ - 显式移动构造函数
尝试编译以下代码:
收到以下错误:
调用 'Foo' 的隐式删除的复制构造函数
好吧,很明显 copy-ctor 被隐式删除了。
问题1:为什么编译器需要copy-ctor Foo
?我期望 的返回值是用 move-ctor 从右bar
值构造的。Foo()
然后我将 move-ctor 重新声明为隐式,一切都成功编译。
问题 2:为什么当我将 move-ctor 重新声明为隐式时,编译器不再需要 copy-ctor?
问题 3:关键字在复制和移动 ctor 的上下文中意味着什么explicit
,因为它肯定意味着与常规 ctor 的上下文不同的东西。
c++ - 为什么我们需要在移动构造函数中将右值引用设置为 null?
我无法理解设置rhd.pds
为的原因nullptr
。
如果我们删除这一行会发生什么:rhs.pds = nullptr;
c++ - 抛出异常时是否创建了 std::exception 对象?
我有一个CustomException
实现的类std::exception
,在其中我明确删除了复制和移动构造函数。当我抛出该类的异常时,调用已删除的构造函数时会出现编译错误。
是否在某处创建了 CustomException 实例?抛出异常时会创建哪些对象?
c++ - 是否可以在不编写复制构造函数的情况下在 main 中的构造函数之间进行选择?
真实的例子显然要长得多,但这总结了我的问题:
然后主要:
哎呀!那是行不通的,实例超出了后续程序的范围。
但是现在我遇到了麻烦,因为我没有定义复制构造函数。我真的不想写一个复制构造函数,因为我的实际类有几十个成员,其中许多是非基本类型,可能需要更多的工作来复制。
具体来说,我得到
c++ - C++ 移动构造函数和作用域
如果我在堆栈上声明了一个对象,并且我返回了对它的引用,我相信我将无法再访问它,因为它超出了范围。正确的?
如果我只返回对象本身(不是对它的引用)怎么办?会调用复制构造函数吗?(我听说过“移动构造函数”这个词,但从我读到的,这似乎是一个新功能。有人可以详细说明一下吗?)
在什么情况下会调用析构函数?
c++ - C++11 隐式移动构造函数
我无法理解为什么以下内容(至少根据 gcc 4.8)在 C++11 中是合法的:
在什么情况下语言允许或实际首选移动构造函数?临时返回值似乎可以移动(和垃圾内容),但我想为所有可以静默使用移动的地方找到核心语言规则。谢谢!
c++ - 错误:调用“Cadena”的隐式删除的复制构造函数
当我尝试编译我的代码时,我遇到了下一个错误:
Cadena 中的构造函数是:
和移动构造函数:
usuario.h 中的声明是:
Cadena 类运行良好,但现在我需要使用它,编译器会删除这些错误。我认为我没有做任何特别的事情,只返回/分配一个 Cadena 类型的对象..
我期待你的反馈,
最好的祝福。