On Friday 03 June 2005 11:29, Mws wrote: > imho this is not how to use a singleton at all. > think about what you do. I don't see any problem, could you please be elaborate? > On Friday 03 June 2005 12:25, Filipe Sousa wrote: > > I have 3 files, the library (singleton.h/.cc) and the main program > > (main.cc) > > > > -- singleton.h -- > > #pragma once > > > > #include <iostream> > > > > class singleton { > > public: > > singleton() { std::cout << __PRETTY_FUNCTION__ << std::endl; } > > static singleton* instance() { > > static singleton s; > > return &s; > > } > > }; > > > > -- singleton.cc -- > > #include "singleton.h" > > > > void foo() > > { > > singleton::instance(); > > } > > > > -- main.cc -- > > #include "singleton.h" > > > > int main() { > > foo(); > > singleton::instance(); > > return 0; > > } > > > > c++ -g -fPIC -Wall -c singleton.cc -o singleton.o > > c++ -fPIC -shared -Wl,-soname,libsingleton.so -o libsingleton.so > > singleton.o c++ -Wall -g -c main.cc -o main.o > > c++ -g -fPIC main.o -o main -rdynamic -L${PWD} -lsingleton > > -Wl,-rpath,${PWD} > > > > fsousa@neptuno ~/tmp/vis $ ./main > > singleton::singleton() > > > > Here, the singleton is only instanciated once as expected, but if I add > > visibility support to the code > > > > -- singleton.h -- > > #pragma once > > > > #include <iostream> > > > > class __attribute__ ((visibility("default"))) singleton { > > public: > > singleton() { std::cout << __PRETTY_FUNCTION__ << std::endl; } > > static singleton* instance() { > > static singleton s; > > return &s; > > } > > }; > > > > __attribute__ ((visibility("default"))) void foo(); > > > > c++ -g -fPIC -Wall -fvisibility-inlines-hidden -fvisibility=hidden -c > > singleton.cc -o singleton.o > > c++ -fPIC -fvisibility-inlines-hidden -fvisibility=hidden -shared > > -Wl,-soname,libsingleton.so -o libsingleton.so singleton.o > > c++ -Wall -g -c main.cc -o main.o > > c++ -g -fPIC main.o -o main -rdynamic -L${PWD} -lsingleton > > -Wl,-rpath,${PWD} > > > > fsousa@neptuno ~/tmp/vis $ ./main > > singleton::singleton() > > singleton::singleton() > > > > I have more than one instance. Am I doing something wrong? > > > > gcc (GCC) 4.0.1-beta20050526 (Gentoo 4.0.1_beta20050526) > > > > -- Filipe Sousa -- Filipe Sousa
Attachment:
pgpzs9q33LBB3.pgp
Description: PGP signature