单件模式如果按方法一写,所有用到单件模式的类声明中不允许再次定义构造和析构函数,但是类实现中必须实现构造和析构函数。如果不实现析构函数,就会报“undefined reference to 'vtable for classname'”错误。
单件模式一:
#define PATTERN_SINGLETON_DECLARE(classname) \
private: \
classname(); \
public: \
static classname * instance(); \
virtual ~classname();
#define PATTERN_SINGLETON_IMPLEMENT(classname) \
classname * classname::instance() \
{ \
static classname * _instance = NULL; \
if( NULL == _instance) \
{ \
_instance = new classname; \
} \
return _instance; \
}
单件模式二:
#define PATTERN_SINGLETON_DECLARE(classname) \
static classname * instance();
#define PATTERN_SINGLETON_IMPLEMENT(classname) \
classname * classname::instance() \
{ \
static classname * _instance = NULL; \
if( NULL == _instance) \
{ \
_instance = new classname; \
} \
return _instance; \
}
其他出现这个错误原因类似,虚函数的问题 http://hi.baidu.com/wind_stay/item/6c1e540a20812e163b53ee13