草庐IT

move_disc

全部标签

c++ - Qt 拖放 : cannot move when copy is enabled (Ubuntu Gnome)

我正在实现一个View和一个模型,我希望在其中支持内部移动项目(通过拖动)和复制项目(通过在拖动时按Ctrl)。我已经按照说明完成了我需要做的一切。我已经设置了mime函数,我已经实现了removeRows()和flags()。问题是当我拖动时,它默认为复制操作(我得到带有加号的箭头光标,它确实通过在模型中创建一个新项目来复制项目)。我能看到的唯一区别是:如果我在supportedDropActions()中只返回Qt::MoveAction,它只会移动。如果我返回(Qt::CopyAction|Qt::MoveAction),它只会复制。有什么想法吗?我希望它像Nautilus(Gn

c++ - Bison 值(value) move/效率

我正在根据Bison的语义值构建我的解析数据结构。一个特定的结构是类型std::vector.我很好奇Bison内部如何处理move的语义值。我尝试分析c++.m4文件,发现:templateinlinevoid]b4_parser_class_name[::basic_symbol::move(basic_symbol&s){super_type::move(s);]b4_variant_if([b4_symbol_variant([this->type_get()],[value],[move],[s.value])],[value=s.value;])[]b4_locations

c++ - std::is_nothrow_move_constructible 是否需要 noexcept 析构函数?

以下代码无法使用VisualStudio2017(15.5)、gcc6.4.0和clang4.0.1进行编译,即静态断言失败:structType{Type(Type&&)noexcept{}~Type()noexcept(false){}};static_assert(std::is_nothrow_move_constructible::value,"Typeshouldbenothrow-move-constructible");static_assert(std::is_nothrow_constructible::value,"Typeshouldbenothrow-cons

c++ - move 具有常量数据成员或引用成员的类的构造函数

我在理解何时以及是否调用move构造函数或move赋值运算符时遇到一些问题,特别是在具有常量数据成员的类的上下文中。考虑类templateclassA{const*TconstP;//constantdatamemberexplicitA(const*Tp):P(p){std::cerr和测试程序classB{intX[100];Aget_a()const{returnA(this);}};intmain(){Bb;Aa=b.get_a();//whichoperator/ctorisusedfor'='here?a.test();}那么编译的结果是不同的,这取决于为类A中的move构

c++ - 线程安全的 unique_ptr move

是否可以使用C++11原子操作安全地moveunique_ptr?目前我有这样的代码std::unique_ptrDataManager::borrowSyncToken(){std::unique_locksyncTokenLock(syncTokenMutex);returnstd::move(syncToken);}我想知道是否有更优雅的方式,比如简单地声明:std::atomic>syncToken;并避免互斥量的需要。或者我可能根本不需要关心这里的锁并且std::move已经是原子的了?经过到目前为止的研究,在我看来:std::move本身不是原子的,需要有一些同步,否则2个

c++ - 错误地使用 move 的值

在转向C++11之后,我现在在我的构造函数中系统地按值传递我的字符串。但是现在,我意识到在构造函数的主体中使用值时更容易引入错误:classA(std::stringval):_val(std::move(val)){std::cout我该怎么做才能减少出错的几率? 最佳答案 命名参数,其目的是以某种独特的方式被move,至少在构造函数的实现中是这样A::A(std::stringval_moved_from):_val(std::move(val_moved_from)){std::cout然后尽早离开它们(比如在构造列表中)。如

c++ - 如何使具有 unique_ptr 成员的类与 std::move 和 std::swap 一起工作?

我有课。它有一个unique_ptr成员。classA{std::unique_ptrm;};我希望它适用于以下语句Aa;Ab;a=std::move(b);std::swap(a,b);如何制作?根据评论,我有一个问题。这个编译器依赖吗?如果我什么都不做,它无法通过VC++2012的编译。我试过structA{A(){}A(A&&a){mb=a.mb;ma=std::move(a.ma);}A&operator=(A&&a){mb=a.mb;ma=std::move(a.ma);return*this;}unique_ptrma;intmb;};但不确定这是否是最好和最简单的方法。

c++ - move 构造函数 C++11

我正在查看我继承的一些代码,它有一个矩阵类,它在C++中实现二维矩阵,并有move构造函数和赋值运算符。其实现方式如下:templateclassmatrix_data{...std::unique_ptrdata_;//Somedefinitionstypedefmatrix_datathis_typematrix_data(this_type&&other){std::swap(data_,other.data_);}};现在,我不确定为什么要在这里交换数据指针。我认为它应该是这样的data_=std::move(other.data_);我猜测交换仍然没问题,因为other实例在

c++ - 复制构造函数和 move 构造函数如何工作

我的问题是了解这两个构造函数究竟是如何工作的。我有这个类:classmoveClass{intvariabile;public:moveClass(){}//moveconstructormoveClass(moveClass&&arg){cout据我了解,当我实例化此类的新对象时,会根据参数的类型调用构造函数。move构造函数的优点是,当使用右值实例化对象时,不会复制该对象,而只是move它。1moveClassa;2moveClassb=a;3moveClassc=std::move(a);考虑到这个例子,我可以说当我实例b时,a被复制,然后分配给b吗?换句话说,直到第2行,我的内

c++ - std::move 意外调用析构函数

我一直在尝试编写一个不能复制但可以move的类,并且只能使用命名构造函数创建。我使用下面的namedConstructor3实现了我的目标。但是,我不明白为什么namedConstructor2失败了。structA{inta;//staticA&&namedConstructor1(inta_A)//{//Ad_A(a_A);//returnd_A;//cannotconvertfromAtoA&&//}staticA&&namedConstructor2(inta_A){wcout输出是Namedconstructor2Created:a=2Obliterated:a=2Moved