C++ 复制和指针
我对副本分配和指针有疑问 我将举一个例子:C++ 复制和指针,c++,pointers,copy,C++,Pointers,Copy,我对副本分配和指针有疑问 我将举一个例子: class Abc { public: Abc() { q = new Qwe;} Qwe* GetQwe() { return q; } private: Qwe* q; }; Abc* a = new Abc(); Qwe* aux = a->GetQwe(); aux->Modify(); 我不知道当我调用GetQwe时,它是否返回了q值的一个副本,但不在与q相同的内存位置 所以我的问题是,Abc的q
class Abc
{
public:
Abc() { q = new Qwe;}
Qwe* GetQwe() { return q; }
private:
Qwe* q;
};
Abc* a = new Abc();
Qwe* aux = a->GetQwe();
aux->Modify();
我不知道当我调用GetQwe时,它是否返回了q值的一个副本,但不在与q相同的内存位置
所以我的问题是,Abc的q会被修改吗 它返回指针的副本。此副本指向内存中原始指针
q
指向的同一对象。因此,指针q
不会被修改,但pointee
会被修改。它返回指针的副本。此副本指向内存中原始指针q
指向的同一对象。因此,指针q
不会被修改,但pointee
会被修改
所以我的问题是,Abc的q会被修改吗
不会修改q
本身,GetQwe()
将返回指针副本,该指针仍然指向与q
相同的内存位置,但q
和aux
都指向的对象是相同的,可以通过Modify()
调用进行修改。尽管您需要在调用其成员函数之前初始化Abc::q
所以我的问题是,Abc的q会被修改吗
不会修改q
本身,GetQwe()
将返回指针副本,该指针仍然指向与q
相同的内存位置,但q
和aux
都指向的对象是相同的,可以通过Modify()
调用进行修改。Althru在调用其成员函数之前需要初始化Abc::q。GetQwe()
返回指向Qwe对象的指针(地址)。因此,您的指针aux
指向与p
相同的对象,因此调用Modify将更改单个对象。要获得一份副本,然后丢失*如下所示:
Qwe GetQweCopy() { return *p; }
GetQwe()
返回指向Qwe对象的指针(地址)。因此,您的指针aux
指向与p
相同的对象,因此调用Modify将更改单个对象。要获得一份副本,然后丢失*如下所示:
Qwe GetQweCopy() { return *p; }