我对delete
语句是否需要pointer
或object
感到困惑。
有时候我会看到以下内容,这表明指针应该是一个参数
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;
答案 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。