我有一个简单的结构,朋友将被分配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
姓名/电子邮件吗?
答案 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)
您可以使用类而不是结构,使用名称电子邮件等属性,然后您只需要删除整个成员吗?