返回静态对象不同地址的函数
function returning different address of static object
在执行下面的代码时,它打印"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个隐式)公共复制或移动构造函数。
相关文章:
- 如何在c++程序中找到函数的地址
- 函数名是c中该函数的第一条指令的地址吗
- 从 C++ 中的函数返回数组地址问题
- 为什么成员函数地址离自由函数这么远?
- 调用 lua 函数的地址为 C/C++?
- 在 Microsoft Access SQL 中调用自定义 DLL 函数时传递的内存地址无效
- 为什么每次执行时函数的地址都不同?
- 我正在尝试将表的地址传递给要在另一个函数中使用的指针,但得到不兼容的指针类型
- 获取函数的地址?
- 模板到函数的时刻地址是否可以作为指向某个函数的函数指针传递?
- 为什么使用存储在虚拟方法表中的地址调用虚拟函数的函数会返回垃圾?
- 指针在函数调用后更改其地址
- 在 gcc/clang (C++) 中获取函数范围之外的标签地址
- 在每个运行时将函数保存到相同的地址
- 在指向现有内存地址的 hpp 文件中声明成员函数的最佳方法
- 创建一个函数来转换数组元素的类型并返回数组的地址
- 如何定义全局函数指针并分配给特定地址
- 常量引用函数参数的地址何时唯一?
- 打印我的Get MAC地址函数的std::字符串时出现意外输出
- 成员函数地址(函数指针)