函数返回静态对象的不同地址

时间:2016-02-01 10:51:31

标签: c++ oop memory static singleton

在执行下面的代码时,它会打印“none”两次,但每次打印不同的地址,即使它被声明为静态变量。

class singletonDemo {
private:
    string text;
    static singletonDemo s;
    singletonDemo(string t2){ text = t2; }



public: 
    static singletonDemo getObject() {
    return s;
}

void print() {
    cout << text << endl;
}
};

singletonDemo singletonDemo::s("none");


int main() {

    singletonDemo::getObject().print();

    singletonDemo::getObject().print();

    cout << "one: "<< &(singletonDemo::getObject()) << endl;
    //cout << "print: " << single

    cout << "two: " << &(singletonDemo::getObject()) << endl;
    cout << "three: " << &(singletonDemo::getObject()) << endl;

    system("pause");

}

我在Visual Studio Community 2013中执行此代码。 请帮忙!

1 个答案:

答案 0 :(得分:3)

  

但每次都打印不同的地址,即使它被声明为静态变量。

您不打印静态变量的地址。您打印由getObject返回的静态变量的两个单独副本的地址。 progarm是不正确的,因为您不允许将address-of运算符与临时对象一起使用。

这可能是您返回副本的错误,您可能想要返回对静态变量的引用:static singletonDemo& getObject()

为了防止这样的错误,我建议你的单例设计中没有(n隐式)公共副本或移动构造函数。