0

我在 C++ 中有一个通用的单例类,它在单线程中工作,但现在我要去多线程环境,我想确保单例在那里工作,而崩溃的一件事是多个线程试图在那个单指针上调用 delete。有没有办法不使用锁来避免这个错误。

class singleton
{
public : 
    static singleton* getinstance();
private :
    singleton();
    singleton(const singleton& that);
    singleton& operator=(const singleton& that);
    static singleton* ptr;
};
4

2 回答 2

1

这种方式比较好。没什么好抱怨的。干杯!

于 2013-09-19T10:18:56.693 回答
1

哪里删了?单例通常永远不会被删除;如果你想破坏它(你通常不这样做),你可以使用 Meyers 成语;否则,你只分配一次,永远不要删除它。

线程问题更加微妙。最简单的解决方案通常是确保instance在线程开始之前至少调用一次函数,通常是静态变量初始化的结果。一旦指针为非空,它就永远不会改变,因此线程没有问题。(但这与删除任何内容无关。)

于 2013-09-19T10:37:30.387 回答