java - 简单的 Java 代码,无法创建 C++ 等效代码(私有(private)静态成员和公共(public)访问器方法)

标签 java c++ static pass-by-reference

我是一名拥有 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++ 知识尝试了大约四种变体。我发现用相同的语法传递“example”可以得到一个存储在类中的“example”的拷贝。我了解指针背后的大部分逻辑,只是不了解很多细节。这个例子对我有很大帮助。

如果有人可以给我等效的 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 以来标准的一部分。大多数最近的编译器已经接受了它的用法,如上所示;对于一些年龄较大的 child ,您可能需要做一些特殊的事情:

  • 例如对于 g++ <= 4.6,将 -std=c++0x 添加到编译命令行
  • 对于某些人,您可能必须使用 std::tr1::shared_ptr
  • 如果以上两个选项都失败了,你可以使用boost::shared_ptr来自 boost 库。

关于java - 简单的 Java 代码,无法创建 C++ 等效代码(私有(private)静态成员和公共(public)访问器方法),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19087890/

相关文章:

java - 在构造函数中调用另一个类的非静态方法

objective-c - Objective-C 中 static const 和 #define 的区别

java - 不可修改的 map 是否需要同步?

java - 在实体对象中将 native SQL 与默认 Hibernate 行为混合?

c++ - 为什么在x86上除以3需要右移(以及其他奇数)?

swift - 如何在 Swift 中初始化 Struct 中的变量一次

java - Java 和 MySQL 中多个 boolean 标志与多路复用整数(位)的效率

java - 如何编写java hibernate多对多关系检索查询

c++ - “超出 PCH 的虚拟范围”问题 - 在 Visual Studio 2019 升级到 16.7.6 之后

c++ - rg 在名为 m_rgNames 的成员变量中意味着什么?