- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我有以下单例策略类实现:
template <typename T>
class Singleton
{
Singleton(){}; // so we cannot accidentally delete it via pointers
Singleton(const Singleton&) = delete; // no copies
Singleton& operator=(const Singleton&) = delete; // no self-assignments
Singleton(Singleton&&) = delete; // WHY?
Singleton& operator=(Singleton&&) = delete; // WHY?
public:
static T& getInstance() // singleton
{
static T instance; // Guaranteed to be destroyed.
// Instantiated on first use.
// Thread safe in C++11
return instance;
}
};
然后我通过奇怪的重复模板模式 (CRTP) 使用它
class Foo: public Singleton<Foo> // now Foo is a Singleton
{
friend class Singleton<Foo>;
~Foo(){}
Foo(){};
public:
// rest of the code
};
我不明白为什么要删除 move 构造函数和赋值运算符。你能给我一个例子,如果我不删除(根本不定义) move ctor 和赋值运算符,我最终会破坏单例吗?
最佳答案
如果你声明了一个复制构造函数(即使你在声明中将它定义为delete
d),也不会隐式声明任何 move 构造函数。参照。 C++11 12.8/9:
If the definition of a class
X
does not explicitly declare a move constructor, one will be implicitly declared as defaulted if and only if— X does not have a user-declared copy constructor,
— ...
由于您确实有一个用户声明的复制构造函数,因此如果您不声明一个 move 构造函数,则根本就不会有 move 构造函数。所以你可以完全摆脱 move 构造函数声明定义。 move 赋值运算符也是如此。
关于c++ - 为什么要在单例中删除 move 构造函数和 move 赋值运算符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23771194/
我最近购买了《C 编程语言》并尝试了 Ex 1-8这是代码 #include #include #include /* * */ int main() { int nl,nt,nb;
早上好!我有一个变量“var”,可能为 0。我检查该变量是否为空,如果不是,我将该变量保存在 php session 中,然后调用另一个页面。在这个新页面中,我检查我创建的 session 是否为空,
我正在努力完成 Learn Python the Hard Way ex.25,但我无法理解某些事情。这是脚本: def break_words(stuff): """this functio
我是一名优秀的程序员,十分优秀!