jjzjj

NonCopyable

全部标签

c++ - 如果我想让类不可复制, "operator="返回类型是否重要?

假设我有一个不支持成员复制的类,所以我不想保留编译器实现的复制构造函数和赋值运算符。我也不想实现这些,因为要么这样做需要额外的努力,我不需要在我的类里面进行这些操作,或者那些操作在我的类里面没有意义所以我想禁止他们。这样做I'lldeclarethemprivateandprovidenoimplementation:classNonCopyable{private:NonCopyable(constNonCopyable&);//notimplementedanywherevoidoperator=(constNonCopyable&);//notimplementedanywher

c++ - 未调用复制构造函数,但编译器提示没有

给定以下代码:#includeenumError{ERR_OK=0};structFilter:privateboost::noncopyable{Filter(){}virtual~Filter(){}virtualintfilter(int*data)const=0;};structSpecialFilter:publicFilter,privateboost::noncopyable{inlineSpecialFilter(unsignedintmin,unsignedintmax):min(min),max(max){}virtual~SpecialFilter(){}virt

c++ - 使用 msvc 时,有没有办法获得有关错误上下文的更好信息? (例如 : C2248)

我想知道是否有办法获得有关msvc(2005)中错误位置的更好信息?例如,在我的类中从boost::noncopyable继承时,我得到一个C2248错误,内容如下:errorC2248:'boost::noncopyable_::noncopyable::noncopyable':cannotaccessprivatememberdeclaredinclass'boost::noncopyable_::noncopyable'.Thisdiagnosticoccurredinthecompilergeneratedfunction'MyClass::MyClass(constMyCl

c++ - 在 C++ 中插入容器时如何处理不可复制的对象

我正在寻找处理不可复制对象的最佳实践。我有一个互斥类,显然不应该是可复制的。我添加了一个私有(private)复制构造函数来强制执行。这破坏了代码-有些地方只需要修复,但我有一个普遍的问题将使用互斥锁作为数据成员或通过继承的类插入到容器中。这通常发生在容器初始化期间,因此互斥锁尚未初始化,因此可以,但如果没有复制构造函数,它就无法工作。将容器更改为包含指针是NotAcceptable。有什么建议吗? 最佳答案 这里有三个解决方案:1.使用指针-快速解决方法是使其成为指针容器-例如shared_ptr.如果您的对象确实不可复制,并且无

c++ - 在 C++ 中插入容器时如何处理不可复制的对象

我正在寻找处理不可复制对象的最佳实践。我有一个互斥类,显然不应该是可复制的。我添加了一个私有(private)复制构造函数来强制执行。这破坏了代码-有些地方只需要修复,但我有一个普遍的问题将使用互斥锁作为数据成员或通过继承的类插入到容器中。这通常发生在容器初始化期间,因此互斥锁尚未初始化,因此可以,但如果没有复制构造函数,它就无法工作。将容器更改为包含指针是NotAcceptable。有什么建议吗? 最佳答案 这里有三个解决方案:1.使用指针-快速解决方法是使其成为指针容器-例如shared_ptr.如果您的对象确实不可复制,并且无

c++ - 通过隐式转换返回时是否需要复制构造函数?

以下代码在VisualC++2013中编译良好,但在GCC或Clang下编译失败。哪个是正确的?通过隐式转换返回对象时是否需要可访问的复制构造函数?classNoncopyable{Noncopyable(Noncopyableconst&);public:Noncopyable(int=0){}};Noncopyablefoo(){return0;}intmain(){foo();return0;}海合会:error:'Noncopyable::Noncopyable(constNoncopyable&)'isprivateNoncopyable(Noncopyableconst&)

c++ - 通过隐式转换返回时是否需要复制构造函数?

以下代码在VisualC++2013中编译良好,但在GCC或Clang下编译失败。哪个是正确的?通过隐式转换返回对象时是否需要可访问的复制构造函数?classNoncopyable{Noncopyable(Noncopyableconst&);public:Noncopyable(int=0){}};Noncopyablefoo(){return0;}intmain(){foo();return0;}海合会:error:'Noncopyable::Noncopyable(constNoncopyable&)'isprivateNoncopyable(Noncopyableconst&)

c++ - STL 关联容器 : erasing and getting back the (noncopyable) element

我正在使用STL关联容器(std::set和std::map),其中包含一个std::unique_ptr键。实例。键定义等效于以下内容:structKey{std::unique_ptrobject;booloperator==(constKey&rhs)const{returnobject->equal(*rhs.object);}booloperatorless(*rhs.object);}}众所周知,STL关联容器(尤其是自C++11起)无法获取对要移动的键的非常量引用。我的key是不可复制的,所以c++:Removeelementfromcontainerandgetitba

c++ - boost::noncopyable 的 unordered_map 无法从 operator[] 返回引用

为了演示我的问题,请考虑这个无法编译的简单程序:#include#includeclassfoo:boost::noncopyable{};intmain(){std::unordered_mapm;auto&element=m[0];return0;}使用当前版本的boost(1.52),VisualStudio2012返回错误:无法访问类“boost::noncopyable_::noncopyable”中声明的私有(private)成员。std::unordered_map的运算符[]返回对所提供键处元素的引用,乍一看似乎应该有效——我要求的是对元素的引用,而不是它的拷贝.我对这

c++ - boost 的虚拟析构函数 :noncopyable classes?

我对以下代码有疑问:classMyClass:privateboost::noncopyable{public:MyClass(){}virtual~MyClass(){}}classOtherClass:privateboost::noncopyable{private:MyClass*m_pMyClass;}我的想法是不能使用构造或赋值来复制MyClass。如果我想支持从我不想支持的MyClass派生类,则需要使用虚拟析构函数。我不打算创建指向此类的指针并传递它们。我不想要单例,而且我看不出删除虚拟析构函数有什么坏处。如果删除不可复制类的虚拟析构函数,是否会引入潜在问题?有没有更好