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; }