c – 静态对象的这个指针

前端之家收集整理的这篇文章主要介绍了c – 静态对象的这个指针前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
如果我将它放在一个静态对象中并将其存储在Singleton对象的向量中,我可以假设指针在程序的整个生命周期中指向该对象吗?

解决方法

通常,您不能假设,因为未指定在不同翻译单元中创建静态对象的顺序.在这种情况下它会起作用,因为只有一个翻译单元:
#include <iostream>
#include <vector>
class A
{
    A() = default;
    A(int x) : test(x) {}
    A * const get_this(void) {return this;}
    static A staticA;
public:
    static A * const get_static_this(void) {return staticA.get_this();}
    int test;
};

A A::staticA(100);

class Singleton
{
    Singleton(A * const ptr) {ptrs_.push_back(ptr);}
    std::vector<A*> ptrs_;
public:
    static Singleton& getSingleton() {static Singleton singleton(A::get_static_this()); return singleton;}
    void print_vec() {for(auto x : ptrs_) std::cout << x->test << std::endl;}
};

int main()
{
    std::cout << "Singleton contains: ";
    Singleton::getSingleton().print_vec();

    return 0;
}

输出

Singleton contains: 100

但是如果A :: staticA在不同的翻译单元中定义怎么办?是否会在创建静态Singleton之前创建它?你不能确定.

猜你在找的C&C++相关文章