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

function returning different address of static object

本文关键字:地址 函数 静态 对象 返回      更新时间:2023-10-16

在执行下面的代码时,它打印"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中执行此代码。请帮忙!

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

不打印静态变量的地址。打印静态变量的两个单独副本的地址,这些副本由 getObject 返回。progarm 格式不正确,因为不允许将 address-of 运算符用于临时对象。

返回

副本可能是一个错误,您可能打算返回对静态变量的引用:static singletonDemo& getObject() .

为了防止这样的错误,我建议不要在单例设计中使用(n个隐式)公共复制或移动构造函数。