C++ 单身不工作
我已经“按书”编写了这个单例演示程序,但它似乎没有编译。我从编译器那里得到一个链接器错误,该错误与保存单例实例的单例类中的静态变量有关。原因可能是什么C++ 单身不工作,c++,singleton,C++,Singleton,我已经“按书”编写了这个单例演示程序,但它似乎没有编译。我从编译器那里得到一个链接器错误,该错误与保存单例实例的单例类中的静态变量有关。原因可能是什么 #include <iostream> #include "Singleton.h" //using namespace std; int main() { Singleton * sinObj1 = Singleton::Instance(); sinObj1 -> setInt (3); Sin
#include <iostream>
#include "Singleton.h"
//using namespace std;
int main()
{
Singleton * sinObj1 = Singleton::Instance();
sinObj1 -> setInt (3);
Singleton * sinObj2 = Singleton::Instance();
std::cout << sinObj2 -> getInt() << std::endl;
return 0;
}
您必须像在
singleton.cpp
文件中那样定义静态m_singleton
字段:
Singleton::m_instance = NULL;
但我会像这样重写您的Instance()方法:
Singleton* Singleton::Instance()
{
static Singleton instance;
return &instance;
}
并删除m_实例
字段。这样做的好处是,当程序关闭时,您的单例实例将被正确删除。就像现在一样,你的单例实例永远不会被删除,更重要的是,它的析构函数永远不会被调用。因此,如果您决定向Singleton类添加一个(非默认)析构函数,例如清理一些资源,它将不会被调用
我还将返回对singleton的引用,而不是指针,因为它比返回指针(这可能会提示客户端删除singleton实例!)更好地传递所有权语义。singleton*singleton::m_instance=NULL;编译,但我将使用引用方法。谢谢你的提示!
Building target: SingletonTest
Invoking: MacOS X C++ Linker
g++ -o "SingletonTest" ./src/Singleton.o ./src/SingletonTest.o
Undefined symbols for architecture x86_64:
"Singleton::m_instance", referenced from:
Singleton::Instance() in Singleton.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [SingletonTest] Error 1
Singleton::m_instance = NULL;
Singleton* Singleton::Instance()
{
static Singleton instance;
return &instance;
}