Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何从静态对象中获取该对象的值?_C++_Oop_Pointers_Memory_Static - Fatal编程技术网

C++ 如何从静态对象中获取该对象的值?

C++ 如何从静态对象中获取该对象的值?,c++,oop,pointers,memory,static,C++,Oop,Pointers,Memory,Static,我正在尝试从静态对象中创建指向静态对象值的外部指针。我们称这个对象为Foo 到目前为止,我实现这一点的唯一方法是创建一个Supervisor类,Foo继承该类,该类包含两个静态类型变量。一个称为superObject的对象是实际初始化的对象。另一个称为superPointer,是同一类型的双指针。在Foo对象内部,我声明了一个名为supervisor的外部指针,并为其分配了一个null ptr。然后,在Supervisor基类中,我使用双指针superPointer将Supervisor外部指针

我正在尝试从静态对象中创建指向静态对象值的外部指针。我们称这个对象为Foo

到目前为止,我实现这一点的唯一方法是创建一个Supervisor类,Foo继承该类,该类包含两个静态类型变量。一个称为superObject的对象是实际初始化的对象。另一个称为superPointer,是同一类型的双指针。在Foo对象内部,我声明了一个名为supervisor的外部指针,并为其分配了一个null ptr。然后,在Supervisor基类中,我使用双指针superPointer将Supervisor外部指针的值更改为superObject的地址。瓦拉

这里的目标是创建对此对象的全局可访问引用。尽我最大的努力避免单身,并保持线程安全。我只是想知道有没有更好的办法

我会发布代码,但我真的必须清理它并改变它。我认为描述已经足够了。实际上,也许更简单

编辑:事实证明,对于静态对象,我不能依赖于它们的构造时间和顺序。使用单阶段流程对此不起作用。相反,我必须继续依赖一个两阶段的过程,就像我上面概述的那样。标记
Ilya Kobelevskiy的回答是正确的,因为它演示了一种方法,但同样,当与静态对象一起使用时,它应该附带一个警告。

也许我忽略了一些东西,但不会

class Foo
{
//some methods
public:
Foo* getSelf() const { return this;}
}

只是工作?

我正试图理解你在上面的评论中说的话,但我不确定这是否是你想要的

class Foo
{
    public:
        Foo();
        static Foo* shared_instance() {return &shared_instance_;};

    private:
        static Foo shared_instance_;
}

这样,您既可以按原样使用共享实例,也可以在需要时实例化新实例。

问得好。这个Foo类实际上是一个模板类。对于这种特殊类型的Foo,我使用模板专门化来初始化它,然后创建对它的全局访问,如上所述。我只想要一个。然而,对于其他类型,这些事情不会发生,我可以有不止一个。这回答了你的问题吗?标记作为答案,但请看我上面的编辑,关于它在静态对象中的使用。@Stradigos我认为你想得太多了。请注意,getSelf()方法是非静态的。因此,不需要对对象的创建顺序进行任何假设—方法只能在对象创建后从现有对象调用,并且它将返回指向该对象的指针—对象是否静态在本次竞赛中无关紧要。