move-semantics 相关问题

移动语义是一种编程语言功能,当源对象是临时对象或其他过期对象时,允许复制操作被更有效的“移动”替换。

将语义从一个矢量移动到另一个矢量

如果我有一个向量std :: vector oldData,我可以使用移动语义将数据移动到另一个向量std :: vector newData中。而不是这样做:std :: vector ... ...>

回答 1 投票 0

移动语义机制

我已经开始学习C ++,但对移动语义有些疑问。当这本书说A的move构造函数“窃取”右值B的属性时,是否意味着指向a ...

回答 1 投票 0

为什么行为随emplace_back / push_back的顺序变化而变化?为什么构造函数的数量增加?

class Buffer {unsigned char * ptr {nullptr}; size_t长度{0}; public:Buffer():ptr(nullptr),length(0){std :: cout <

回答 1 投票 0

为什么在 和

版本。 中的std :: move实际上执行其名称所暗示的动作,而<< [std :: move in [ 所以将这两个名称都命名为move有点困惑吗? 这可能会造成混淆,尤其是那些不习惯于支持重载的语言的人。 但是,虽然这是主观的,但了解两个具有相同名称的功能也并不难。 为什么在和同时都有std :: move 因为该语言的设计者选择对两个函数使用相同的名称。

回答 1 投票 5

在参数中移出的智能指针上调用方法是否安全?

此代码安全吗?如果方法接受值或右值引用,答案是否会改变?它会更改为unique_ptr吗? struct foo {void bar(std :: shared_ptr p)//或std :: ......> ] >>

回答 1 投票 1

使用std :: move()与在构造函数成员初始化器列表中分配

在参数化的构造函数(带有初始值设定项列表)中使用std :: move()而不是常规成员初始化(即分配)的好处是什么?例如,#include #include ] >>

回答 1 投票 0

是否允许从std :: map的键中窃取资源?

在C ++中,可以从以后不再需要的地图中窃取资源了吗?更准确地说,假设我有一个带有std :: string键的std :: map,并且我想通过...

回答 4 投票 9

我应该实现右值推送功能,应该使用std :: move吗?

作为练习,我正在C ++ 11中实现一个堆栈类。这是相关的代码:template class stack {private:T * elements; std :: size_t容量; std :: size_t计数; ...

回答 1 投票 0

为什么要复制而不是移动我的数据元素?

我正在执行一些有关移动语义的测试,我的类行为对我来说很奇怪。给定模拟类VecOfInt:类VecOfInt {public:VecOfInt(size_t num):m_size(num),m_data(new ...

回答 5 投票 1

为什么本应仅调用move构造函数时在此代码段中调用复制构造函数?

我正在执行一些有关移动语义的测试,我的类行为对我来说很奇怪。 1)OK CASE给定了模拟类VecOfInt:类VecOfInt {public:VecOfInt(size_t num):m_size(num),...

回答 3 投票 0

[c ++使用指针时移动语义

使用原始指针时如何使用移动分配运算符。除了做类似的事情,还有别的方法吗:T dest = new T(); T src = new T(); (* dest)= std :: move(* src);

回答 1 投票 0

当使用已在其他地方进行std :: move'ed的变量时出现错误,或者至少是警告

This:void foo(int && r){std :: cout << r << std :: endl; } int main(){int i = 2; foo(std :: move(i));我= 3; //没有警告。有什么办法在这里得到一些警告吗?返回0; } ...

回答 4 投票 8

基类中的默认析构函数,如果有成员,则禁用子类中的move构造函数

为什么Base1中的默认(用户声明的)析构函数会阻止Child1类中移动构造函数/运算符的生成,但是当我将成员数据从Base(Base2)移到Child(...]时,一切正常,...( [

回答 1 投票 0

当不存在xvalue时,移动语义如何应用于以下代码段?

我偶然发现了下一篇文章,并且不了解C ++ 98和C ++ 11之间的性能差异,正如作者所说,这归因于移动语义。 #include ... ...>

回答 1 投票 0

添加自定义析构函数时,移动构造函数在派生类中消失

我有一个仅移动的Base类和一个Derived,它继承了Base的构造函数。我想给Derived一个自定义的析构函数,但是当我这样做时,它不再继承Base的move构造函数。非常...

回答 3 投票 3

r值参数确实是函数范围内的l值参数吗?

我在实现列表类的代码中找到以下代码段void push_front(const T&x){insert(begin(),x); } void push_front(T && x){insert(begin(),std:...

回答 1 投票 1

具有std :: move函数签名的传递向量

考虑下面的代码void foo(std :: vector v){//在这里做些事情} //调用函数vector v1 = {1,2,3}; foo(std :: move(v1));我的问题是,函数foo ...

回答 2 投票 3

为什么不能将变量移出闭包?

我具有以下功能:pub fn map_option (a2b:Box B>)-> Box )-> Option > {Box :: new(move | opt_a:...] >

回答 1 投票 1

使用具有移动语义的C ++ 11-不使用标准库(以及Boost.smart_ptr)

我正在使用Zephyr RTOS和ARM嵌入式微控制器(例如STM32 Nucleo系列(Cortex M4 / 0))使用Zephyr RTOS。最近,由于最近对C ++支持的重大改进,因此...

回答 1 投票 0

c ++为什么在移动构造函数中需要向前/向后移动

用移动的构造函数构造对象后,新对象应“窃取”“源”对象的资源,然后将其保留为不确定(但有效)状态。例如:#...

回答 1 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.