gpt4 book ai didi

C++/析构函数 - 运算符删除

转载 作者:行者123 更新时间:2023-11-28 02:56:52 26 4
gpt4 key购买 nike

我想知道我是否必须在这样的例子中删除这个指针:

class Person
{
public:
Person(char *name) :_name(name) {}

// Is this delete necessary?
~Person() {
cout<<"Godbay Person"<<endl;
delete _name;
}

private:
char * _name;
}

最佳答案

无论如何,这肯定是错误的。

有两种可能:

  1. 名称是在免费商店中专门为您的对象创建的,您的对象必须拥有所有权。那这个名字就得删掉。

  2. 该名称不是在免费商店中创建的(例如,作为字符串 litaral,这很有可能),或者其他一些对象正在管理该名称,因此您的对象不应拥有所有权。那么任何删除都会对您的程序造成严重破坏。

那么为什么即使在第一种情况下我也说错了呢?因为 name 听起来像一个字符串,而不是单个字符,这意味着 name* 将指向一个动态分配的字符数组。在这种情况下,删除它的正确方法是 delete[] name

但是如果可能,避免使用普通(字符)指针,对于情况 1。改用一些内存管理类(字符串类或智能指针),以获取摆脱手动管理内存所有权的麻烦。 deletedelete[] 应该很少出现在您的代码中,除非您无法访问最新的 C++ 编译器。

关于C++/析构函数 - 运算符删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21777615/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com