我希望你能帮我翻译关于C++作用域的内容。请看下面的例子:
运行此程序将输出:
dstr:1 1 dstr:1
显然,第一个析构函数调用发生在Test中,另一个则是当程序终止并销毁d时发生的。
所以我的问题是:c被复制到哪里了?我的推理有错吗?我想问的一般性问题是:拥有一个接受对象引用并将其存储在成员变量中的成员函数是否安全?
非常感谢您的帮助。
class C
{
int i_;
public:
C() { i_ = 0;}
C(int i) { i_ = i; }
C(const C &c) {
i_ = c.i_;
cout << "C is being copied: " << i_ << endl;
}
int getI() { return i_; }
~C() {cout << "dstr: " << i_ << endl;}
};
class D
{
C c_;
public:
void setC(C &c) { c_ = c; }
int getC_I() { return c_.getI(); }
};
void Test(D &d)
{
C c(1);
d.setC(c);
//here c is going out of scope, surely it will be destroyed now?
}
int main()
{
D d;
Test(d); //this sets value of c_ to the local variable in Test.
//Surely this will be invalid when Test returns?
int ii = d.getC_I();
cout << ii << endl;
}
运行此程序将输出:
dstr:1 1 dstr:1
显然,第一个析构函数调用发生在Test中,另一个则是当程序终止并销毁d时发生的。
所以我的问题是:c被复制到哪里了?我的推理有错吗?我想问的一般性问题是:拥有一个接受对象引用并将其存储在成员变量中的成员函数是否安全?
非常感谢您的帮助。