2017-05-30 63 views
-1

我有一個從B派生的類A. A實現了複製構造函數和賦值運算符。我有B的複製構造函數,並且想要爲B實現賦值。我的方法(很可能是不正確的)是派生類的複製賦值運算符

B& B::operator=(const B& other) { 
    B tmp (other); 
    std::swap <A>(*this, tmp); 
    std::swap (m_member, other.m_member); 
} 

可以這樣工作嗎?我在網上查找了std :: swap的基礎類的特化,但沒有找到有用的東西。

+2

請你的標題描述的問題,而不是剛上市的技術 –

+0

它仍然只是名稱的東西,而不是要求或描述問題 –

回答

0

你可以檢查這個stackoverflow線程(calling operators of base class... safe?)如何使用operator = from基類。

我不明白的是爲什麼你使用交換。而應該做這樣的事情:

B& B::operator=(const B& other) { 
    A::operator = (other); 
    this->m_member = other.m_member; 
    return *this; 
} 
+0

M_member可動態分配。我使用複製構造函數來分配新的內存,然後我試圖只交換,以便tmp的析構函數正確地釋放內存。 – Cristi

+0

如果您使用C++ 11,請嘗試使用std :: unique_ptr或std :: shared_ptr。查看包含unique和shared_ptr視頻的此頁面:https://www.youtube.com/playlist?list=PL5jc9xFGsL8FWtnZBeTqZBbniyw0uHyaH 另一種解決方案是創建一個用於動態分配內存的私有/受保護方法,並從構造函數和來自運營商= –