C++ C++;参考复制和分配
关于下面的代码,我有几个问题C++ C++;参考复制和分配,c++,C++,关于下面的代码,我有几个问题 #include <iostream> using namespace std; class A { public: A & add(A & b); }; A & A::add(A & z) { A * a = new A(); A & b = *a; cout << "Inside add, address of a: " << &a <&
#include <iostream>
using namespace std;
class A
{
public:
A & add(A & b);
};
A & A::add(A & z)
{
A * a = new A();
A & b = *a;
cout << "Inside add, address of a: " << &a << endl;
cout << "Inside add, address of b: " << &b << endl;
cout << "Inside add, address of z: " << &z << endl;
A aa;
cout << "Inside, add, address of aa: " << &aa << endl;
return aa;
}
int main()
{
A *a = new A();
cout << "Original a: " << a << endl;
A & b = a->add(*a);
cout << "b: " << &b << endl;
return 0;
}
#包括
使用名称空间std;
甲级
{
公众:
A&D(A&b);
};
A&A::添加(A&z)
{
A*A=新的A();
A&b=*A;
coutA1:您使用a*a=new a()
创建了一个新的*a。main中的a
与a::add
中的a
不同。main中的a
由变量z
引用
A2:否,您在堆上创建了a
,因此它将一直持续到您对该变量调用delete
A3:取消引用不会更改存储在指针中的内存位置,它只会获取存储在该位置的值。引用更像是一个别名。因此&b
就像对Q1说(*A)
,我知道main()中的对象与函数add()中的对象不同。我的问题是,如果我传递对函数的引用,则会传递正确的对象,但在函数中,如果我尝试创建对现有对象的引用,则会获得不同的对象,因此,在函数add()中,a和b的内存地址不同。对于Q2,我更改了代码以显示正在返回函数堆栈上的对象。从内存地址可以看出,堆栈上的对象超出了函数的范围。您对Q2的更改现在是未定义的行为。它在某些情况下可能有效,但决不能保证