如果我有以下声明:
#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();
};
Run Code Online (Sandbox Code Playgroud)
析构函数中的代码应该是什么?我应该"删除" std::string字段吗?
Liz*_*bin 25
您的析构函数只需要销毁您为其分配资源的成员.所以不,你不"删除"字符串.
您删除使用new分配的指针
你的析构函数不必超过
~DEMData()
{
}
Run Code Online (Sandbox Code Playgroud)
您不需要析构函数(也不需要复制构造函数,也不需要重载的赋值运算符)。这就是使用像字符串这样的类为您做事的全部意义,而不是使用 C 风格的字符串和手动内存管理。
编译器会为您生成上述所有内容,并且默认情况下,析构函数仅调用所有成员的析构函数(即使在用户定义的析构函数完成后,也会隐式发生这种情况)。String 的析构函数从那里接管。