草庐IT

移动魔百盒

全部标签

c++ - std::list 是否保证项目永远不会移动到不同的内存位置?

这个问题在这里已经有了答案:IteratorinvalidationrulesforC++containers(6个答案)关闭8年前。是否保证一旦std::list或std::forward_list项被分配,它将保留在相同的内存位置(地址)直到被销毁?当然,复制列表本身除外。

C++ 移动语义说明

我有一个包含std::string的Text类。方法SetText如下:voidText::SetText(conststd::string&str){m_str=str;}由于此方法几乎总是以右值作为参数调用,因此我想到了移动构造函数。我了解基本知识,但仅此而已。所以我进行了测试并得出结论,另一个类似的函数会更好,一旦定义了移动构造函数和移动赋值,就可以提高性能:voidText::SetText(std::string&&str){m_str=move(str);}有我的问题:它适用于std容器吗?他们是否提供移动构造函数和赋值?当类没有堆分配时,移动语义是否有用?(我的意思是根本

c++ - 是否可以在以下代码中避免对复制/移动构造函数的需要?

请考虑以下代码,该类型可以组成不同的混合类型。组合类型的构造函数采用可变元组列表,表示组合类型构造函数的参数:#include#include#includestructMixinBase{MixinBase()=default;//Note;wanttodeletetheseinsteadofdefaultthem.MixinBase(constMixinBase&)=default;MixinBase(MixinBase&&)=default;};structMixinA:publicMixinBase{MixinA(int,conststd::string&,conststd::

c++ - 使用私有(private)复制/移动构造函数进行聚合初始化

我在为anotherquestion测试一些东西时遇到了这个问题关于初始化聚合。我正在使用GCC4.6。当我用列表初始化聚合时,所有成员都在适当的位置构建,无需复制或移动。即:intmain(){std::array,2>a{std::array{Goo{1,2},Goo{3,4}},std::array{Goo{-1,-2},Goo{-3,-4}}};}让我们通过一些嘈杂的构造函数来确认:structGoo{Goo(int,int){}Goo(Goo&&){std::cout运行时,不会打印任何消息。但是,如果我将移动构造函数设为私有(private),编译器会提示'Goo::Goo

c++ - 使 QGraphicsProxyWidget 可移动和可选择

我想放一个QWidget成QGraphicsView并使用QGraphicsProxyWidget使小部件可选和可移动.(这非常适用于QGraphicsRectItem、QGraphicItem等)这是我目前使用的代码://CreatenewQGraphicsSceneandassigntographicsViewscene=newQGraphicsScene(this);ui->graphicsView->setScene(scene);//CreatewidgetandaddtosceneMyWidget*widget=newMyWidget;QGraphicsProxyWidge

c++ - 如何获得 QTreeWidget 内部项目移动的通知?

我子类化了一个QTreeWidget,将它的dragDropMode设置为InternalMove并用自定义项目填充它,其中一些可以拖动,其他接受掉落。用户可以按预期在树周围移动项目。但是我需要通知项目顺序的变化并做出适当的react。不幸的是,没有我可以连接到的与树内项目移动相关的信号。我尝试获取QTreeWidget的底层model()的句柄,然后连接到它的rowsMo​​ved信号,但它似乎不会在内部移动期间发出。我重新实现了QTreeWidget的dropEvent(),但无法确定那里的目标行索引。显然,dropMimeData()事件根本不会为内部移动调用。我可以尝试其他任何

c++ - 显式移动构造函数是否消除了隐式复制构造函数?

我阅读了接受的答案here那:[a]copyconstructorandcopyassignmentoperatorwon'tbegeneratedforaclassthatexplicitlydeclaresamoveconstructorormoveassignmentoperator我确实注意到(g++4.7.2)如果您定义了一个移动构造函数,它将与例如push_back()一起使用,而如果您所做的只是=delete复制构造函数,你没有得到隐式移动构造函数——你得到一个错误。[...这让我想知道如果您没有明确地做任何事情,实际使用的是哪一个(移动或复制)...]然而,thison

c++ - 隐藏的移动构造

为什么有时不调用move-constructor?测试移动语义(Livecode):structTest{intid;Test(intid):id(id){cout输出:1Test()1f(Testt)测试显示复制构造函数被调用。但是,在f(Test(1));之后函数f在没有为Test(1)的右值对象调用移动构造函数的情况下被调用.它是隐式编译器优化吗?或者我错过了重要的一点? 最佳答案 明确允许编译器省略临时对象的拷贝(或移动)。基本上,对象是在预期有效结果的地方构造的。如果构造函数或析构函数有副作用,这种省略甚至是允许的。相关条

C++ 11 移动语义和 STL 容器

关于移动语义和容器:我知道当移动操作在元素类型中定义时,STL容器会利用移动。但是它如何知道元素是否定义了移动操作?为什么STL容器不直接对元素调用std::move(),而不管元素是否定义了移动操作?我问这个是因为我知道您可以在对象上调用std::move(),即使它的类型没有定义任何移动操作。谢谢。 最佳答案 长话短说,这正是他们所做的,调用std::move而不关心它是否能够移动或只是复制。值得注意的是,一些提供强异常保证的函数,例如std::vector::resize,将调用鲜为人知的std::move_if_nothro

c++ - 将从唯一指针移动到共享指针也会初始化 enable_shared_from_this

当我继承std::enable_shared_from_this,但是我创建了一个unique_ptr,std::enable_shared_from_this里面的weak_ptr也会被初始化吗当我通过std::move或移动构造函数“移动”到shared_ptr时?例如下面的代码会发生什么:#include#includeclassA:publicstd::enable_shared_from_this{public:std::shared_ptrgetA(){returnshared_from_this();}};intmain(){std::unique_ptru(newA()