簡體   English   中英

復制字符串集的正確方法是什么(在復制構造函數和賦值運算符中)?

[英]What is the right way of copying string set (in copy constructor and assignment operator)?

代碼塊A:

typedef struct NAMEOFTHESTRUCT {
    long lNumber;
    std::set<wstring> szStrings;

    NAMEOFTHESTRUCT() {
        lNumber = -1L;
    };

    NAMEOFTHESTRUCT(const NAMEOFTHESTRUCT& src) {
        lNumber = src.lNumber;
        szStrings = src.szStrings; //COPY THIS WAY
    };

    NAMEOFTHESTRUCT& operator =(const NAMEOFTHESTRUCT& src) {
        lNumber = src.lNumber;
        szStrings. = src.szStrings; //COPY THIS WAY
        return *this;
    };
}

代碼塊B:

typedef struct NAMEOFTHESTRUCT {
    long lNumber;
    std::set<wstring> szStrings;

    NAMEOFTHESTRUCT() {
        lNumber = -1L;
    };

    NAMEOFTHESTRUCT(const NAMEOFTHESTRUCT& src) {
        lNumber = src.lNumber;
        if (!src.szStrings.empty()) // COPY THIS WAY
            szStrings.insert(src.szStrings.begin(), src.szStrings.end());
    };

    NAMEOFTHESTRUCT& operator =(const NAMEOFTHESTRUCT& src) {
        lNumber = src.lNumber;
        if (!src.szStrings.empty()) // COPY THIS WAY
            szStrings.insert(src.szStrings.begin(), src.szStrings.end()); 
        return *this;
    };
}

在代碼塊A和B中,字符串集的復制是不同的。

哪個是復制字符串集的正確方法? 為什么?

如果復制是在復制構造函數/賦值運算符中進行的,是否有所不同? 如果是這樣,為什么?

您應該信任分配,它是在類型中實現的,並且知道最有效的方式。 除此之外,第二個版本的賦值運算符是錯誤的,因為它將合並集合中的值,從右手到左手。 也許您打算先clear它?

除此之外,副本構造函數通常被拼寫為:

NAMEOFTHESTRUCT(const NAMEOFTHESTRUCT& src)
   : lNumber(src. lNumber), szStrings(src. szStrings)
{}

暫無
暫無

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

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