c ++ builder bpl's и static члены имеют более одного статического экземпляра - PullRequest
1 голос
/ 21 января 2012

В C ++ Builder (2009 - Windows 7) Я создал компонент, который включает в себя заголовочный файл с классом со статической переменной-членом - кажется, есть два экземпляра статической переменной-члена, как описано ниже.

У меня есть статическая переменная-член в классе, например

class theclass {
  static theclass *ref;
  ...
}

Это в theclass.h.

в theclass.cpp у меня есть инициализатор

theclass *theclass::ref = NULL

Теперь у меня есть компонент, который включает в себя заголовок в bpl и ссылки на файл .cpp, и я также включаю этот файл в свое основное приложение и ссылку на него, в основном приложении theclass :: ref инициализируется новым экземпляр класса, как

theclass *instance = new theclass().

У меня есть приложение с несколькими новыми компонентами. Когда экземпляр вызывается из кода приложения, тогда все хорошо, когда экземпляр вызывается из кода в bpl, тогда это NULL и происходит сбой? Кажется, что есть две статические переменные, одна из которых находится в bpl, а вторая в main - любые предложения будут оценены?

(вероятно, следует упомянуть, что это мой первый компонент для сборки на С ++ - написано много компонентов Delphi)

[Update] Если я отключу «Сборку с помощью пакетов времени выполнения», то это сработает - так что, похоже, что-то связано с динамическим связыванием?

1 Ответ

0 голосов
/ 30 января 2013

Вы также можете попробовать #pragma package(smart_init,weak) в файле cpp, поэтому только этот файл будет статически связан.

...