草庐IT

noncopyable

全部标签

c++ - 不可复制和 move 构造函数

我已经使一个类的成员不可复制,但我给它一个move构造函数和赋值运算符。然而,它不会像vector一样与容器打球。classNonCopyable{public:NonCopyable(constNonCopyable&)=delete;NonCopyable&operator=(constNonCopyable&)=delete;protected:NonCopyable(){}~NonCopyable()_NOEXCEPT{}};classMember:NonCopyable{public:Member(inti):mNum(i){}~Member(){}Member(Member

C++ - 如何反复重新初始化对象?

我正在尝试用C++实现这个逻辑:Objectobj(args);while(obj.isOK()){obj=obj.next();}但我不能使用这个确切的代码,因为Object继承了boost::noncopyable所以它没有赋值运算符。我可以向Object添加方法和构造函数(但不能使其可复制),但我不想这样做。其他问题有手动销毁和放置new作为解决方案,如果我为Object创建一个新的构造函数,我可以这样做,但同样,最好我不需要新的构造函数,这看起来像无论如何,这是非常讨厌的解决方案。我有什么选择? 最佳答案 使Object::

具有不可复制不可移动元素类型的 C++ 容器

我需要一个既不可复制也不可移动的元素容器。这些元素不是默认可构造的,但它们的构造函数获得相同的参数。容器的大小在其生命周期内不会改变。它应该像内置数组一样简单,但它的大小是在运行时调用构造函数时确定的。有没有一种简单的方法可以实现它,而无需使用std::vector>产生的内存分配和间接寻址开销?? 最佳答案 这是一个简单但不完整的解决方案,假设每个元素都是用相同的参数构造的。它使用placementnew就地构建元素(另见thisSOquestion):#include#include#include//samplestructu

c++ - 如何定位 "boost::noncopyable"错误?

与Boost.Asio的殊死搏斗,遇到了很多困难。其中之一是我几乎无法定位“boost::noncopyable错误”所在的位置!如果我不小心违反了不可复制的规定,IDE只会在noncopyable.hpp或其他地方显示一些错误,但在我的文件中不显示。我只能在存在asio对象的任何地方通过注释和取消注释来查找错误。(ps:我的IDE是visualc++2008,难道这个IDE和Boost关系不好??)编辑:我知道阅读完整错误消息会有很大帮助。但是这个怎么样?1>d:\boost\include\boost-1_42\boost\asio\basic_io_object.hpp(92):

c++ - 在 std::pair 中存储不可复制(但可 move )的对象

我正在尝试将不可复制(但可move)的对象存储在std::pair中,如下所示:#includestructS{S();private:S(constS&);S&operator=(constS&);};intmain(){std::pairp{0,S()};return0;}但是我在使用gcc4.6时遇到以下编译器错误:Infileincludedfrominclude/c++/4.6.0/bits/move.h:53:0,frominclude/c++/4.6.0/bits/stl_pair.h:60,include/c++/4.6.0/utility:71,fromsrc/tes

c++ - OpenMP 是否复制私有(private)对象?

我正在编写一个读取大文件(3x280GB)并对文件中的数据执行拟合程序的程序。并行化这样的程序非常方便,使用OpenMP可以轻松完成。我不明白的是如何在OpenMP中获取私有(private)变量。众所周知,fstream的对象是不可复制的,而且从直觉上讲,这使我无法将其用作私有(private)对象。所以文件的阅读者被共享了。后来我遇到了一些问题,我想尝试将fstreams设为私有(private),......你猜怎么着?有效!!!这怎么可能?!如果对象是不可复制的,OpenMP如何为每个内核使用同一对象的不同拷贝?我的程序是这样的:fstreamdataReaderX(Dirs[

c++ - 显式默认和删除的构造函数 : is there any similar functionality available in VS2012?

在VS2012中,“显式默认和删除特殊成员函数”功能(http://en.wikipedia.org/wiki/C++0x#Explicitly_defaulted_and_deleted_special_member_functions、http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2346.htm)尚不可用(http://msdn.microsoft.com/en-us/library/vstudio/hh567368.aspx)。是否有任何解决方法来使用此类功能,即使非常冗长?在实践中,我可以翻译这个吗struc

c++ - boost 不可复制的怪异性

我有一个继承自boost::noncopyable的类;比如说,标题摘录如下:classA:boost::noncopyable{...blah...private:structimpl;boost::scoped_ptrm_impl;};然后在我的解决方案的一个项目中,我有一个类(它也恰好继承自boost::noncopyable),它的私有(private)成员在实现细节中是对A类型的对象,例如,在header摘录中:classB:boost::noncopyable{...blah...private:structimpl;boost::scoped_ptrm_impl;};在执

c++ - 将不可复制的对象放入标准容器中

这个类是否设计了标准的C++0x方法来防止copy和assign,以保护客户端代码免受data的意外双重删除??structDataHolder{int*data;//dangerousresourceDataHolder(constchar*fn);//loadfromfileorsoDataHolder(constchar*fn,size_tlen);//*fromanswers:added*~DataHolder(){delete[]data;}//preventcopy,topreventdouble-deletionDataHolder(constDataHolder&)=d

c++ - 使类不可 move 的用例(如果有)是什么?

考虑一种使类不可复制的经典方法://similartoboost::noncopyableclassnoncopyable{protected:constexprnoncopyable()=default;noncopyable(constnoncopyable&)=delete;noncopyable&operator=(constnoncopyable&)=delete;};classc:privatenoncopyable{/*...*/};由于声明任何复制操作会阻止自动生成move操作,这会自动使所有派生类(默认情况下)也不可move(因此noncopyable的全名将是non