c ++ delete是否需要指针或对象?

时间:2017-11-03 07:41:52

标签: c++

我对delete语句是否需要pointerobject感到困惑。

有时候我会看到以下内容,这表明指针应该是一个参数

int* myAge = new int(12);

delete myAge;

有时我看到它像这样使用

Person* friends = new Person[3];

// constructing my friends
friends[0] = new Person("Bob", 21);
friends[1] = new Person("Alice", 19);
friends[2] = new Person("Jack", 5);

// destructing my friends 
delete friends[0]; 
delete friends[1]; // (isn't friends[i] an object?)
delete friends[2];
delete[] friends;

1 个答案:

答案 0 :(得分:3)

  

delete语句是否需要指针或对象

delete需要一个指针。

您共享的第二个示例有错误。对于第二个示例,语句

Person* friends = new Person[3];
必须将

更改为:

Person** friends = new Person*[3];

请参阅此方法live here

因为在此声明之后,您将Person*分配给friends[i](因为new Person("Bob", 21);会产生指向Person的指针,而不是对象),所以要做到声明工作,friends[i]也必须Person*

Person* friends = new Person[3];的情况下,friends只是一个对象数组。对象已由默认的无参数构造函数构造。如果您想要更改数据成员,则必须使用setter。之后,您将使用delete[] friends;删除此数组。

Person* friends = new Person[3];

// setting the data members
friends[0].setPerson("Bob", 21);
friends[1].setPerson("Alice", 19);
friends[2].setPerson("Jack", 5);

// destructing my friends
delete[] friends;

请参阅第二种方法live here