如何为此正确编写析构函数

时间:2014-07-29 06:29:55

标签: c++ c++11 destructor

我有一个简单的结构,朋友将被分配new,所以显然我需要delete。但是,通过姓名和电子邮件,我不太确定。

struct Member
{
    char * name;
    char * email;
    LinkedList<Member> * friends;

    Member() : name(nullptr), email(nullptr), friends(nullptr)
    {
    }

    ~Member()
    {
        if (friends)
            delete friends;
    }
};

例如,如果我有

怎么办?
Member m;
m.name = "John Doe";
m.email = "johnDoe0@email.com";

我还需要delete姓名/电子邮件吗?

3 个答案:

答案 0 :(得分:7)

经验法则是:仅delete new delete[](以及new[]delete)。{/ p>

在这种情况下,你没有为字符指针分配内存,而是让它们指向不变的字符数组,所以你当然不应该delete它们。

另请注意,在nullptr上执行{{1}}是有效的。

答案 1 :(得分:4)

尝试使用std::string代替char*。这将解决您的问题。否则这将是麻烦的...你将需要一个标志让析构函数知道如何分配名称(通过new通过*alloc或只是一个普通的常量)并相应地采取行动(即:如果它是alloc free new如果它是delete&#39;然后{{1}}它,如果它是通过常量初始化的那么...你不必做任何事情。)

答案 2 :(得分:0)

您可以使用类而不是结构,使用名称电子邮件等属性,然后您只需要删除整个成员吗?