【发布时间】:2011-09-23 20:34:20
【问题描述】:
以下代码显示了预期之外的输出:
class test
{
public:
test()
{
std::cout << "Created" << (long)this << std::endl;
}
~test()
{
std::cout << "Destroyed" << (long)this << std::endl;
}
};
int main(int argc, char** argv)
{
std::vector<test> v;
test t;
v.push_back(t);
return EXIT_SUCCESS;
}
执行时显示:
Created-1077942161
Destroyed-1077942161
Destroyed674242816
我认为第二个“Destroyed”输出不应该存在。当我不使用向量时,结果是一条 Created 和一条 Destroyed 线,正如预期的那样。这种行为正常吗?
(这是在 FreeBSD 系统上使用 GCC 编译的)
【问题讨论】:
-
为SSCCE+1
-
要打印指针,最好转换为 void 指针:
std::cout << (void*)this << std::endl;. -
返回
EXIT_SUCCESS也是可选的。您可以省略main中的返回值,它将返回0(这将变成您的平台表示“正常终止”的任何数字) -
这很好。正在调用提供
test(const test&);的编译器。