【发布时间】:2015-12-07 10:59:09
【问题描述】:
我有一个单例课程。
在 A.h 中
class single
{
public:
static single *Instance;
static single* getInstance()
{ if(!Instance) Instance = new single;
return Instance;
}
void hello () { cout<<"Hello"; }
private: single(){ }
}
在 A.cpp 中
single *single::Instance = 0;
std::auto_ptr <single> SINGLE_OBJ (single::getInstance());
在 B.cpp 中
#include "A.h"
SINGLE_OBJ->hello();
我收到以下错误: SINGLE_OBJ 未在此范围内声明。
【问题讨论】:
-
为什么实例的内存是通过
auto_ptr对外管理的?它使用new分配的事实是一个实现细节。它应该保留在single的内部以进行封装,并确保即使用户没有将指针放在auto_ptr中也能清理内存。顺便说一句,C++11 将已弃用的std::auto_ptr类模板替换为std::unique_ptr。
标签: c++ singleton global-variables