Несколько динамических библиотек с одинаковыми статическими переменными, сколько экземпляров? - PullRequest
0 голосов
/ 11 октября 2010

Позвольте мне объяснить это на примере: У меня есть класс S, который является статическим.

У меня есть две динамические библиотеки A и B, которые используют S.

У меня есть приложение, которое связывает с A и B, в этом приложении сколько разных экземпляров S создано?

Все это с использованием C ++ и Ubuntu.

Заранее спасибо

Ответы [ 2 ]

0 голосов
/ 12 октября 2010

Я только что провел несколько быстрых тестов, и кажется, что если вы используете синглтон Мейера для обеспечения доступа к S (SomeClass):

class SomeClass
{
public:
  static SomeClass& getInstance()
  {
    static SomeClass someClass;
    return someClass;
  }
 ...
};

, в Linux будет один экземпляр глобальной статической переменной, то есть sharedмежду приложениями и общими библиотеками.

Однако AFAIR SomeClass нужно было содержать в DLL, а не в статической библиотеке под Windows: когда SomeClass был частью статической библиотеки, я помню различные экземпляры, распространяющиеся в моем приложении ив моих библиотеках.

0 голосов
/ 11 октября 2010

Обе библиотеки DLL будут использовать собственную копию статической переменной.

...