【发布时间】:2013-06-27 19:07:30
【问题描述】:
调试一个疯狂的系统。 一个类的构造函数被多次调用,它们的内存地址是一样的。这是否意味着它们是同一个对象? 创建对象@0xa3d82a0 创建对象@0xa3d82a0 创建对象@0xa3d82a0
我还看到 xxxx 是一个守护进程。 守护进程是什么意思?
谢谢!
【问题讨论】:
-
这可能是构造函数在内存中的地址(虽然不确定)
标签: c++ constructor daemon
调试一个疯狂的系统。 一个类的构造函数被多次调用,它们的内存地址是一样的。这是否意味着它们是同一个对象? 创建对象@0xa3d82a0 创建对象@0xa3d82a0 创建对象@0xa3d82a0
我还看到 xxxx 是一个守护进程。 守护进程是什么意思?
谢谢!
【问题讨论】:
标签: c++ constructor daemon
这可能只是意味着构造函数被保存在同一块内存中(引用位置等)以节省内存。
至于问题的第二部分,引用:“守护程序(或服务)是一个后台进程,旨在自主运行,几乎不需要用户干预。”
Taken from here(不要理会页面上的任何链接,它们似乎都已经死了。不过只是搞砸了锚标签)。
【讨论】:
不,它不是同一个对象。一个对象只能构造一次。您看到的行为并非不可能,例如,如果在循环中在堆栈上分配了许多对象:
#include <iostream>
using namespace std;
struct A {
A() { cout << "Creat" << this << endl; }
};
int main() {
for (int i = 0; i < 5; i++) {
A a;
}
}
这里 'a' 将在同一位置重复构建,打印如下内容:
Creat0xbfcd871f
Creat0xbfcd871f
Creat0xbfcd871f
Creat0xbfcd871f
Creat0xbfcd871f
【讨论】: