【发布时间】:2012-01-21 23:09:59
【问题描述】:
下面的方法总是有效吗?
class MyCLass {
int *pInt;
public:
MyCLass() {
pInt = new int;
*pInt = 42;
}
~MyCLass() {
delete pInt;
printf("Goodbye cruel world!");
}
void func1() {
printf("Hello World %d", *pInt);
}
};
MyCLass foo;
{
MyClass &bar = foo;
//Do stuff
}
foo.func1();
我担心完全模拟原始对象bar 的任务会导致析构函数超出范围时被调用。
【问题讨论】:
-
MyCLass foo = new MyClass();MyCLass 有一个带有MyClass指针的构造函数,否则这是行不通的。 -
语法错误,很好发现,感谢cli_hit,原理保持不变。
-
构造函数的作用与问题完全无关。你可能会问,引用生命周期的结束是否会导致调用裁判的析构函数。这当然是错误的。
-
C++ 中既没有“授权”也没有“仿真”。引用只是一个别名。