2017-07-04 77 views
2

我對複製構造函數的用法有疑問。我知道還有很多其他回答的問題和各種各樣的教程,但我無法完全解決我的問題。使用指針複製構造函數的用法

我有一個類A它實現了一個拷貝構造函數:

A::A(const A& a) { ....... } 

現在在另一類B,我有一個私人的屬性:

A myA; 

在執行過程中的B一個方法被調用用一個指向A對象的指針,我們稱它爲anAPointer。我現在想將anAPointer指向的元素複製到B::myA。如果指針後面的元素稍後發生更改,我不希望這些更改影響myA屬性。

我用this->myA = A(*anAPointer);呢。這是否有我想要的效果?

我還必須在B的析構函中調用delete myA嗎?

+0

沒有必要創建一個臨時變量,只需使用:'this-> myA = * anAPointer;' – Jonas

+0

*我必須在B的析構函數中調用delete myA嗎?* - 沒有人知道上下文是什麼你的物體如何被使用。所以除非你發佈[mcve],否則沒人能給你一個明確的答案。 – PaulMcKenzie

+0

@PaulMcKenzie'myA'在OP中明確聲明爲非指針屬性,因此可以回答 – wasthishelpful

回答

2

您的代碼:

A(*anAPointer) 

呼籲A的拷貝構造函數這樣this->myA將無關的anAPointer指出值A一個實例。對第一個的更改不會傳播到另一個(反之亦然)(除非您的類A處理共享資源,但這不是針對您的問題)。

myA不是一個指針,所以你不必在B的析構函中調用delete

請注意,如果您在A中實施複製構造函數,則應考慮rule of 3/5/0copy and swap idiom

+0

感謝您的回答!所以我做了一切正確的? – lukasl1991

+0

看起來你從你的問題對我做了什麼。進行一些測試以確保;) – wasthishelpful

+0

根據「A」的實際情況,在設計中也考慮3/5/0的規則以及複製和交換習慣用法。看到我編輯的答案與鏈接 – wasthishelpful