Здравствуйте, The Passenger, Вы писали:
в случае студии и винды — GetInstance возвращает разные значения в случае библиотеки и исполняемого
gcc and linux — значение одинаково
код синглтонга
template <typename AType>
class Singleton
{
public:
static AType * GetInstance()
{
if (! fSingleton)
{
fSingleton = new AType;
}
return fSingleton;
}
private:
static AType * fSingleton;
};
template <typename AType>
AType * Singleton<AType>::fSingleton = 0;
код библиотеки
void
BaseFilter::Print() const
{
std::cout << "BaseFilter::Print" << std::endl;
}
void
BaseCode::RegisterFilter() const
{
std::cout << "BaseCode::RegisterFilter, factory at ";
std::cout << Singleton<Factory<MFilter> >::GetInstance();
std::cout << std::endl;
Singleton<Factory<MFilter> >::GetInstance()->Register<BaseFilter>("BaseFilter");
}
MFilter *
BaseCode::CreateFilter() const
{
return Singleton<Factory<MFilter> >::GetInstance()->Create("BaseFilter");
}
код исполняемого
int main()
{
// Running code from BaseLibrary.
// This registers a filter of type BaseFilter at the singletoned factory.
BaseCode b;
b.RegisterFilter();
MFilter * fb = b.CreateFilter();
std::cout << std::endl;
// Print the map
Singleton<Factory<MFilter> >::GetInstance()->PrintMap();
std::cout << std::endl << "main factory at ";
std::cout << Singleton<Factory<MFilter> >::GetInstance();
std::cout << std::endl;
return 0;
}