我正在使用 boost::call_once
在 Linux 上使用 C++ 设计一个线程安全的单例类。
我得到以下编译器错误:
/tmp/ccLanvZI.o: In function `SingleTon::getInstance()':
singleTon.cpp:(.text._ZN9SingleTon11getInstanceEv[SingleTon::getInstance()]+0x1b): undefined reference to `SingleTon::p'
/tmp/ccLanvZI.o: In function `SingleTon::makeInstance()':
singleTon.cpp:(.text._ZN9SingleTon12makeInstanceEv[SingleTon::makeInstance()]+0x21): undefined reference to `SingleTon::SingleTon()'
singleTon.cpp:(.text._ZN9SingleTon12makeInstanceEv[SingleTon::makeInstance()]+0x2c): undefined reference to `SingleTon::p'
collect2: ld returned 1 exit status
make: *** [singlton] Error 1
看了一些帖子,还是不知道怎么处理这个错误。
如何将 void (SingleTon::)()
更改为 void (*)()
?
#include <iostream>
#include <pthread.h>
#include <boost/thread/mutex.hpp>
#include <boost/thread/once.hpp>
#include <boost/bind.hpp>
#include <boost/threadpool.hpp>
#include <boost/thread/thread.hpp>
boost::once_flag flag = BOOST_ONCE_INIT;
class SingleTon
{
private:
static SingleTon *p;
SingleTon();
SingleTon(const SingleTon&);
SingleTon& operator=(const SingleTon&);
void makeInstance();
public:
SingleTon* getInstance();
~SingleTon()
{
if (p)
delete p;
}
};
void SingleTon::makeInstance()
{
p = new SingleTon;
return;
}
SingleTon* SingleTon::getInstance()
{
boost::call_once( makeInstance , flag); // error !!!
return p;
}
int main()
{
SingleTon *s;
s = SingleTon::getInstance();
return 0;
}
最佳答案
错误表明 boost::call_once 对成员函数指针不起作用。这是因为您忘记将 makeInstance 和 getInstance 设为静态。
关于c++ - 如何使用 boost::call_once 在 Linux 上用 C++ 设计单例类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10777520/