繁体   English   中英

基于静态对象引用的单例类,将类成员初始化为默认C ++ 11

[英]singleton class based on static object reference initializing class members to default c++11

我知道这方面有很多问题,但是下面的示例不起作用,并且需要说明或简单的解决方案(我知道我可以使用名称空间和类似的解决方案,但是我想了解这里有什么问题。

它与以前的问题不同,因为

struct point
{ 
    float x;
    float y;
    point(): x(0.0), y(0.0) {}
class A
{
public:
    static A& getRef();
    float getF();
    void setP(point P);
    point getP();
    void setF(float F);
private:
    A();
    ~A();
    float m_myFloat;
    point m_P;
};

// implementation

A& A::getRef()
{
    static A m_A;
    return m_A;
}


float A::getF()
{
    return m_myFloat;
}

void A::setF(float F)
{
    m_myFloat = F;
}

void A::setP (point P)
{
    m_P.x = P.x;
    m_P.y = P.y;
}

point getP()
{
    point P;
    P.x = m_P.x;
    P.y = m_P.y;
    return P;    
}
A::A()
{
    m_myFloat = 12.01;
    m_P.x = 13;
    m_P.y = 14;
}
A::~A()
{

}
// cal from main
point p;
p.x = 19;
p.y = 20; 
float F = 19.54;
A::getRef().setF(F);
A::getRef().setP(p);
p = A::getRef().getP()
std::cout << A::getRef().getF() << std::endl;
std::cout << p.x << " ," << p.y << std::endl;

当成员正确更新时,无论何时调用getRef()都会初始化结构点,这是为什么呢? 我想强调的是C ++ 11(!!!)

非常感谢

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM