如果一個類有一個指針,我們必須通過重載賦值操作符來創建一個深度拷貝(淺拷貝不正確)。默認Assigment運算符是否適用於向量?
那麼,如果一個類有一個成員向量,是否有必要做一個深層複製(通過重載operator=
)?
如果一個類有一個指針,我們必須通過重載賦值操作符來創建一個深度拷貝(淺拷貝不正確)。默認Assigment運算符是否適用於向量?
那麼,如果一個類有一個成員向量,是否有必要做一個深層複製(通過重載operator=
)?
如果一個類有一個指針,我們必須用分配操作符 重載(而不是淺拷貝)來做深度拷貝。
僅當該指針是所謂的「擁有」指針時,即該類語義上擁有指向的資源並負責其最終的釋放或銷燬。
指針也可能是一個所謂的「觀察」指針,它指向代碼的另一部分負責的內容。觀察指針與參考相似。
請牢記這一點,然後才能盲目地在各處實施深度複製。
那麼如果一個類有 成員向量,那麼是否需要深拷貝(運算符=重載)呢? ?
僅當它實際上是指向矢量和的指針(如果該指針是擁有指針的話)。
這實際上從來就不是這種情況。
我假設你真的在談論一個正常的非指針成員變量反正:
class Example
{
// ...
std::vector<int> v;
};
在這種情況下,你不必在所有處理指針。 std::vector
自動管理一切。
關於術語的注意事項:您不要*重載*賦值運算符。超載有另一個含義。你在這裏做的是定義你自己的賦值運算符版本,而不是依靠編譯器自動生成的默認版本。 –