2013-04-24 73 views
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

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

没有q本身将不会被修改,GetQwe()将返回指针仍然指向相同的存储单元q的副本,但对象既qaux指向是一样的,可以通过Modify()调用修改。在你调用成员函数之前,你需要初始化Abc::q

3

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

1

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

Qwe GetQweCopy() { return *p; }