簡體   English   中英

我應該刪除C ++類的字符串成員嗎?

[英]Should I delete the string members of a C++ class?

如果我有以下聲明:

#include <iostream>
#include <string>

class DEMData
{
private:
    int bitFldPos;
    int bytFldPos;
    std::string byteOrder;
    std::string desS;
    std::string engUnit;
    std::string oTag;
    std::string valType;
    int idx;
public:
    DEMData();
    DEMData(const DEMData &d);
    void SetIndex(int idx);
    int GetIndex() const;
    void SetValType(const char* valType);
    const char* GetValType() const;
    void SetOTag(const char* oTag);
    const char* GetOTag() const;
    void SetEngUnit(const char* engUnit);
    const char* GetEngUnit() const;
    void SetDesS(const char* desS);
    const char* GetDesS() const;
    void SetByteOrder(const char* byteOrder);
    const char* GetByteOrder() const;
    void SetBytFldPos(int bytFldPos);
    int GetBytFldPos() const;
    void SetBitFldPos(int bitFldPos);
    int GetBitFldPos() const;
    friend std::ostream &operator<<(std::ostream &stream, DEMData d);
    bool operator==(const DEMData &d) const;
    ~DEMData();
};

析構函數中的代碼應該是什么? 我應該“刪除” std::string字段嗎?

您的析構函數只需要銷毀您為其分配資源的成員。 所以不,你不“刪除”字符串。

刪除使用new分配的指針

你的析構函數不必超過

~DEMData()
{
}

不,std :: string成員會自動分配給堆棧或堆,並自動清理。 您不必在析構函數中執行任何特殊操作來處理字符串。

不,你不應該刪除std::string對象。 當他們的析構函數被調用時,它們將自動釋放。

您不需要析構函數(也不需要復制構造函數,也不需要重載賦值運算符)。 這就是使用類似字符串的類來為你做事情,而不是使用C風格的字符串和手動內存管理。

編譯器會為您生成上述所有內容,默認情況下析構函數只調用所有成員的析構函數(即使在用戶定義的析構函數完成后也會隱式發生)。 String的析構函數從那里接管。

暫無
暫無

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

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