varsayalım ben, statik kütüphanede bir tekil sınıf S bu diğer dinamik kütüphaneleri D1 D2 D3 ile bağlantılı olabilir varSingleton sınıf
Sınıf S ayrı olacak anladığım kadarıyla Yaniher D1, D2 ve D3 ve (küresel) gibi bir tekil
birden fazla kopya sınıf S önlemek için herhangi bir yolu var mı olmasa bile bu doğru olurdu içinde örnek? Tekil S'yi başka bir Dinamik kitaplığa koyamıyorum.
Executable
/ | \ \
D1 D2 D3 D4
| | |
S S S
DÜZENLEME: tekil S ayrı ayrı ... D1 D2 D3 ile bağlantıları ayrı statik kütüphanede.
Ben Bu örnek makefile (tarafından .dll değiştirin şeyleri kontrol etmek için basit bir test durumu yaptı:tekil yığın tahsis edilir, ancak işaretçi
static s::instance()
{
static smart_ptr<S> ptr = NULL;
if(ptr == NULL) ptr = new S;
return ptr;
}
Edit2 statiktir. yani) bir şeyleri kontrol etmek için yaptım, Ubuntu ve Cygwin üzerinde kontrol ettim, hem g ++ derleyiciler hem de davranış farklıydı. cygwin 2 farklı nesneler yarattı fakat ancak ubuntu 1 nesneleri
all: dynamic1 dynamic2 main
static: static.cpp
g++ -c -fPIC static.cpp -o obj/static.o
ar rvs lib/static.a obj/static.o
dynamic1: static dynamic1.cpp
g++ -fPIC -shared dynamic1.cpp lib/static.a -o lib/libdynamic1.dll
dynamic2: static dynamic2.cpp
g++ -fPIC -shared dynamic2.cpp lib/static.a -o lib/libdynamic2.dll
main: dynamic1 dynamic2 main.cpp
g++ --std=c++11 main.cpp -ldynamic1 -ldynamic2 -o lib/main -L./lib
Amacınız nedir? Paylaşılan kaynaklara erişimi kontrol etmek istiyorsanız, örneğin [destek] kullanarak (http://www.boost.org/doc/libs/1_61_0/doc/html/interprocess/synchronization_mechanisms.html) –
Hayır arası işlemler arası eşitleme kullanabilirsiniz. Bu işlemler arasındaki paylaşılan bellekle ilgili değildir. – tejas
@tejas: Windows'ta neden bir DLL yapamıyorsunuz? –