问题 C ++ / CLI中的Singleton示例?


我环顾四周,我需要一个适用于2个或更多C ++ / CLI文件的Singleton类的示例。

如何在C ++ / CLI中声明单例,而不是C#?

如何在两个或多个C ++ / CLI文件中共享该单例?

当我尝试共享该单例时,我不断获得可变重定义。


3250
2017-07-15 18:12


起源

你必须更加具体。它需要延迟初始化吗?它需要线程安全吗?需要处理吗? - Hans Passant
任何例子...... C ++ .NET单例都没有。我得到Redefinition错误,需要管理,但是类已经是byref,我得到了需要“;”在“}”之前,我在变量后也得到“:”。 - buttercup
我会在一周左右的时间内提出这个问题。如果没有答案,我会给这个问题一个赏金......这几乎是不可能的问题,因为互联网上有0个解决方案。 - buttercup


答案:


这适用于C ++ / CLI,而不是“.NET Managed Extensions for C ++”,即C ++ .NET。不要使用Managed Extensions(Visual Studio 2002-2003),它们是错误的。

ref class Singleton
{
private:
  Singleton() {}
  Singleton(const Singleton%) { throw gcnew System::InvalidOperationException("singleton cannot be copy-constructed"); }
  static Singleton m_instance;

 public:
  static property Singleton^ Instance { Singleton^ get() { return %m_instance; } }
};

对于“跨多个文件”,同一项目中的其他编译单元使用 #include,其他程序集使用引用(或 #import)。然后就不会有任何重新定义问题。


15
2017-07-17 17:09



你怎么称呼这个? - marsh


这些可能很有用


0
2017-07-15 18:22



这些不适用于C ++ .NET。它们只能在C ++或C#.NET上运行 - buttercup