我应该为这个结构创建析构函数吗?或者是否有任何隐含的析构函数&&当它超出范围时它会被破坏吗?
这里myLogStructure和mySubject都是结构类型。
#include "stdafx.h"
#ifndef MyLogStruct_H
#define MyLogStruct_H
#include <string>
#include<windows.h>
using namespace std;
struct mySubject
{
string Security_ID;
string Account_Name;
string Account_Domain;
string Logon_ID;
};
struct myLogStructure
{
string message;
bool isAvailableMySubject;
mySubject mySubject1;
};
#endif
我应该为此实现析构函数吗?或者当它超出范围时会被破坏吗?
这里MyLogStructure和MySubject都是类类型。 请注意我使用指针进入这个类的一件事。
#include "stdafx.h"
#ifndef MyLogStructure_H
#define MyLogStructure_H
#include <string>
#include "MySubject.h"
using namespace std;
class MyLogStructure
{
public:
MyLogStructure(LPWSTR providerMessageString1, int version1);
~MyLogStructure(void);
const wchar_t* message;
LPWSTR providerMessageString;
int version;
bool isAvailableMySubject;
MySubject*mySubject;
};
#endif
class MySubject
{
public:
MySubject(const wchar_t* Security_ID1, const wchar_t* Account_Name1, const wchar_t* Account_Domain1, const wchar_t* Logon_ID1);
~MySubject(void);
const wchar_t* Security_ID;
const wchar_t* Account_Name;
const wchar_t* Account_Domain;
const wchar_t* Logon_ID;
};
答案 0 :(得分:3)
是否需要析构函数 NOT 取决于您是使用struct
还是class
。决定因素是struct
/ class
是否已获得必须在对象的生命周期结束时明确释放的资源。如果问题的答案是肯定的,那么你需要实现一个析构函数。否则,您不需要实现它。
对于第一组struct
,最好让编译器实现析构函数。析构函数中没有任何关系。
如果你实施它们,它们将是:
~mySubject() {}
和
~myLogStructure() {}
您可能需要在第二组类中实现析构函数,具体取决于您是否需要释放任何资源。
由于您有指向w_char
的指针来存储该数据,因此您很可能需要实现析构函数,并释放在对象生命周期内获取的内存。
答案 1 :(得分:1)
您不需要为mySubject
或myLogStructure
提供自己的析构函数,因为编译器生成的析构函数可以正常工作(它们将调用std::string
成员的析构函数)。
如果这些类管理内存,你需要为MyLogStructure
和MySubject
提供析构函数,考虑到指针类型的成员。