[英]copy constructor - am I setting my std::strings correctly
我的問題是一個基本問題。 由於std::string
是數組,我是否在復制構造函數中正確處理它們?
class json{
private:
std::string _objectContents;
std::string _regComments;
bool _isJson;
int numElements;
public:
json(const json&);
...
};
json::json(const json& source){
_objectContents = source._objectContents;
_regComments = source._regComments;
_isJson = source._isJson;
_numElements = source.numElements;
}
*編輯刪除指針並更改為有問題的數組。
我是否正確設置了我的 std::strings
您正在正確設置它們,但它可以更好。
您不需要顯式定義的復制構造函數。 編譯器生成的那個將為您擁有的成員變量做正確的事情。
如果必須顯式定義復制構造函數,請使用初始化列表初始化成員。 將實現更改為:
json::json(const json& source) : _objectContents(source._objectContents), _regComments(source._regComments), _isJson(source._isJson), _numElements(source.numElements) { }
字符串賦值運算符隱式地將底層字符數組從源字符串復制(或移動)到目標字符串(深拷貝),而不是僅復制它們的指針(淺拷貝)。
所以是的,你的代碼是正確的。
由於可以使用賦值運算符復制所有成員變量,因此您無需顯式聲明復制構造函數。
雖然如果您使用 C 樣式字符串,您將需要一個復制構造函數。 在這種情況下,默認復制構造函數會執行淺復制,而您可能打算執行深復制。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.