如何使C++类生成不可克隆的对象
How to make a C++ class produce non cloneable objects
如何使类不可克隆,就像我们在Java中创建singleton时所做的那样。
是否有任何条件可以对复制构造函数设置,以便在用户试图复制对象时引发异常?
我是C++的新手,所以请在这里添加任何信息,或者如果已经有答案,请重定向。
只需声明复制构造函数和复制分配运算符私有
在C++03中
class NonCopyable
{
public:
NonCopyable() { }
private:
NonCopyable(const NonCopyable&);
NonCopyable& operator=(const NonCopyable&);
};
您还可以使类从NonCopyable派生,AnotherType是不可复制的
class AnotherNonCopyable : private NonCopyable
{
public:
AnotherNonCopyable () {}
}
使用C++11:
class NonCopyableType
{
public:
NonCopyableType(const NonCopyableType&) = delete;
NonCopyableType& operator=(const NonCopyableType&) = delete;
};
您可以delete
复制构造函数和赋值运算符:
struct Foo
{
Foo(const& Foo) = delete;
Foo& operator=(const Foo&) = delete;
};
如果您没有C++11支持,请将它们设为私有,并且不要实现它们:
struct Foo
{
private:
Foo(const& Foo);
Foo& operator=(const Foo&);
};
注意在C++中,class
和struct
本质上是相同的。
将复制语义声明为delete
:
//C++11 only
MyClass(MyClass const &) = delete;
MyClass& operator=(MyClass const &) = delete;
这使得该类不可复制!
//pre-C++11 code
private:
MyClass(MyClass const &); //declare only, don't define it
MyClass& operator=(MyClass const &); //declare only, don't define it
这也应该有效!
是否有任何条件可以对复制构造函数设置,以便若用户试图复制对象,则可能引发异常。
如果将复制构造函数设为私有,则当程序员尝试创建另一个副本时,代码将不会编译。这可能比在运行时检测到带有异常的错误要好。
class foo {
private:
operator = ( const foo& f);
};
相关文章:
- 是否可以将不可复制的成员用作使对象不可复制的替代方法?
- C++定义构造函数使对象成为非 POD
- 如何使 c++ 中的对象易变?
- 将 std::variant 与 gmock 1.8 对象一起使用时编译错误
- C++如何使函数返回调用它的对象
- 如何使此函数适用于 100 个对象 (c++)?
- 复制一个对象并使两者共享一个成员变量 (C++)
- 为什么信号连接会使套接字客户端对象失效?
- 如何包装对象,使它们成为无法交互的单独类型?
- 当自动编译对象文件时,如何使我的makefile使用我的cflags标志
- C++ GLUT 使对象在视口外消失
- 提升序列化仅适用于主要?当我在其他对象中使用时,继续说"has no member named ‘serialize’"
- 如何使对象通过RVALUE参考通过而没有复制
- 如何使Valgrind不仪器特定的共享对象
- 为什么通过引用传递从 std::function 派生的对象会使程序崩溃?
- 销毁和重新创建一个对象会使指向该对象的所有指针无效吗
- C++ 设计一个对象,使其采用变量值和规则来应用于它们
- 是否可以更早地销毁对象,使其存储内存被后续对象重用
- 无法携带对象以使C++正常工作
- MFC:将 GetContextMenuManager()->ShowPopup 与 Office2007 视觉对象一起使用时的延迟