delete与对象、数组


删除对象有两种:
1、delete
2、delete[]

对象又分基础类型,和自定义对象

基础类型的delete与delete[]执行的现象一样,
只删除了第一个对象,
而且来删除对象不支持指针偏移。


对于用户自定义对象,支持指针偏移,
通过偏移指针来删除对象,但是这样将可能造成混乱:
删除了后,指向地址要附0,首地址不要附0哦,
但却出现  error: non-lvalue in assignment 左值问题。。。



还有一个释放地址 和 释放内容 是不同的概念

#include <iostream>
#include <string>
using namespace std;

class T 
{
public:
    T() { cout << "constructor" << endl; }
    ~T() { cout << "destructor  " << id << endl; }
    int id;
};

int main(int argc, char *argv[])
{
    T *ptr = new T[3];
    int i = 0;
    for (; i < 3; ++i)
    {
        (*(ptr+i)).id = i;
    }
    delete ptr;
//    delete (ptr+2);
//    delete[] ptr;

    return 0;
}


你可能感兴趣的:(C++,c,C#)