簡體   English   中英

復制和指針

[英]Copy and pointers

我對副本分配和指針有疑問。

我將以它為例:

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是否會被修改?

所以我的問題是,來自Abc的q是否會被修改?

沒有q本身不會被修改, GetQwe()將返回仍然指向與q相同的內存位置的指針的副本,但是qaux指向的對象是相同的,可以通過Modify()調用進行Modify() 此外,您需要在調用其成員函數之前初始化Abc::q

它返回指針的副本。 此副本指向內存中原始指針q指向的同一對象。 因此,指針q將不會被修改,但是pointee將被修改。

GetQwe()返回指向Qwe對象的指針(地址)。 因此,您的指針aux指向與p相同的對象,因此對Modify的調用將更改該單個對象。 要獲得副本,然后像這樣丟失*:

Qwe GetQweCopy() { return *p; }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM