简单的 Java 代码,在创建等效C++(私有静态成员和公共访问器方法)时遇到问题

Simple Java code, having trouble creating a C++ equivalent (private static members and public accessor methods)

本文关键字:访问 静态成员 方法 问题 遇到 代码 Java 创建 C++ 简单      更新时间:2023-10-16

我是一名拥有 7 年经验的 Java 开发人员,但我几乎对C++完全陌生。这不是家庭作业,甚至不是真正的有偿工作。我只是在深入研究C++,并且在模拟我在 Java 中经常使用的这种特定模式时遇到了麻烦。

基本上(在Java中(:

    public class ExampleManager
    { 
       private static Example _example;
       public static Example getExample()
       { 
          return _example;
       }
       public static void setExample(Example example)
       {
          _example = example;
       }
    } 

到目前为止,我已经尝试了四种变体,并了解了C++。我发现使用相同的语法传递"示例"会让我获得存储在类中的"示例"的副本。我理解指针背后的大部分逻辑,只是不是很多细节。这个例子对我有很大帮助。

如果有人能给我等效C++代码,以便我可以逐行分解并逐步完成它,我将不胜感激。

我不在 Java 中使用此模式,但它是我用来维护对单个实例成员的线程安全访问的模式的骨架。

C++中基本等效的代码是这样的:

class ExampleManager
{ 
private:
   static std::shared_ptr<Example> _example;
public:
   static std::shared_ptr<Example> getExample()
   { 
      return _example;
   }
   static void setExample(std::shared_ptr<Example> example)
   {
      _example = example;
   }
};

它利用了std::shared_ptr类,它为你做了大部分内存处理工作(你只需要new对象,基本上就像在Java中一样(。

我们不使用"原始"指针(即 Example * ( 这里;使用"原始"指针通常是不受欢迎的(除非您在资源有限或靠近硬件的环境中工作(,因为它在性能方面几乎没有什么好处,但如果不仔细考虑,可能会导致丑陋的问题(内存泄漏、双重删除等(。

请注意,上述shared_ptr只是自 C++11 以来标准的一部分。大多数中途最近的编译器已经接受了它的用法,如上所示;对于一些年龄稍大的人,您可能需要做一些特殊的事情:

  • 例如,对于 g++ <= 4.6,将-std=c++0x添加到编译命令行
  • 对于某些人来说,您可能需要使用std::tr1::shared_ptr
  • 如果上述两个选项都失败了,则可以使用提升库中的 Boost::shared_ptr。