Mar*_*Guo 12 c++ singleton c++11
我创建一个父类来处理带有智能指针的单例模式:
.h文件:
template<class singleType>
class Singleton
{
public:
static std::shared_ptr<singleType> GetInstance();
private:
static std::weak_ptr<singleType> m_singleObject;
};
Run Code Online (Sandbox Code Playgroud)
.cpp文件:
template<class singleType>
std::shared_ptr<singleType> Singleton<singleType>::GetInstance()
{
auto shareObject = m_singleObject.Lock();
if (!shareObject)
{
shareObject.reset(new singleType);
m_singleObject = shareObject;
}
return shareObject;
}
Run Code Online (Sandbox Code Playgroud)
不确定这是使用智能指针的正确方法吗?任何的想法?
非常感谢
已经讨论了这种实现的优点和缺点。但是有很多bug:
1)由于这是一个模板,您必须将实现移至标头中,否则链接器无法找到它。
2).lock()weak_ptr的函数不是大写的。
3)不要忘记实例化
template<class singleType>
std::weak_ptr<singleType> Singleton<singleType>::m_singleObject;
Run Code Online (Sandbox Code Playgroud)
4)更好地使用shareObject = std::make_shared<singleType>(singleType());而不是new: http://herbsutter.com/gotw/_103/
5)正如康拉德提到的:它不是线程安全的。
| 归档时间: |
|
| 查看次数: |
1701 次 |
| 最近记录: |