1

我对复制分配和指针有疑问。

我将它作为一个例子来展示:

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 会被修改吗?

4

3 回答 3

4

所以我的问题是,Abc 中的 q 会被修改吗?

Noq本身不会被修改,GetQwe()将返回仍然指向与 相同的内存位置的指针副本q,但对象qaux指向的对象是相同的,可以通过Modify()调用进行修改。您需要Abc::q在调用其成员函数之前进行初始化。

于 2013-04-24T09:11:46.880 回答
3

它返回指针的副本。此副本指向内存中原始指针指向的同一对象q。所以,指针q不会被修改,但pointee会。

于 2013-04-24T09:11:41.617 回答
1

GetQwe()返回指向 Qwe 对象的指针(地址)。因此,您的指针aux指向同一个对象p,因此对 Modify 的调用将更改该单个对象。要有一个副本,然后像这样丢失 *:

Qwe GetQweCopy() { return *p; }
于 2013-04-24T09:16:18.783 回答