结构中的析构函数和c ++中的类

时间:2015-12-14 03:44:09

标签: c++

我应该为这个结构创建析构函数吗?或者是否有任何隐含的析构函数&&当它超出范围时它会被破坏吗?

这里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;
    };

2 个答案:

答案 0 :(得分:3)

是否需要析构函数 NOT 取决于您是使用struct还是class。决定因素是struct / class是否已获得必须在对象的生命周期结束时明确释放的资源。如果问题的答案是肯定的,那么你需要实现一个析构函数。否则,您不需要实现它。

对于第一组struct,最好让编译器实现析构函数。析构函数中没有任何关系。

如果你实施它们,它们将是:

~mySubject() {}

~myLogStructure() {}

您可能需要在第二组类中实现析构函数,具体取决于您是否需要释放任何资源。

由于您有指向w_char的指针来存储该数据,因此您很可能需要实现析构函数,并释放在对象生命周期内获取的内存。

答案 1 :(得分:1)

您不需要为mySubjectmyLogStructure提供自己的析构函数,因为编译器生成的析构函数可以正常工作(它们将调用std::string成员的析构函数)。

如果这些类管理内存,你需要为MyLogStructureMySubject提供析构函数,考虑到指针类型的成员。