简单的 Java 代码,在创建等效C++(私有静态成员和公共访问器方法)时遇到问题
Simple Java code, having trouble creating a C++ equivalent (private static members and public accessor methods)
我是一名拥有 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。
相关文章:
- 如何在复杂继承中访问静态成员变量
- 如何在类内部使用和访问静态指针到成员值s_ptm?
- decltype:使用指针访问类的静态成员
- 是否通过单元化指针UB访问静态类成员
- 将对象数限制为1可以使用点运算符访问静态成员的1
- 多态性:通过类文本或对象访问静态成员
- 从另一个类访问静态成员函数
- 无法访问静态成员函数C++
- 从外部访问静态成员并通过继承 c++ 访问静态成员
- 通过非静态方法访问静态成员
- 如何在没有对象的情况下访问静态成员 (C++)
- 为什么链接器在内联构造函数中访问静态成员时失败
- 我可以在没有任何前向声明的类/结构上访问静态成员函数吗?
- 访问静态成员函数中的非静态成员的解决方法
- Visual C++ 使用成员选择运算符(. 或 –>)访问静态成员函数
- 使用boost::shared_ptr访问静态成员变量
- 非静态成员函数是否可以访问静态成员函数或数据
- 在c++中显式访问静态成员方法中的静态成员变量
- 无法访问静态成员 ->未解析的外部符号 i
- 通过运算符 [] 访问静态成员unordered_map