正确用于删除指针指向的结构中的数据

时间:2012-02-16 01:17:09

标签: c++ pointers delete-operator

我正在尝试理解释放指向的内存的正确方法。在这种情况下,指针指向结构的新实例。一个例子如下所示

结构是这样的:

    struct MyData
    {
        unsigned short int MYID;    
        unsigned short int MYCMD;    
    }; 

定义如下。

    MyData* injdataRx;

    myDataPtr = new MyData;  // create new instance

...做一些将值加载到指针指向的东西,即。田野。

现在,如果当我完成该结构并且我想确保指针指向的位置(已分配的区域)被释放时,我会这样做。

    delete (myDataPtr);

这是否释放了由“new”创建的内存,因为它知道由于myDataPtr是一个指向MyData类型的指针,它将释放myData的大小?这是怎么回事?

任何帮助澄清这一点都表示赞赏。

2 个答案:

答案 0 :(得分:1)

是的。基本上,当您调用new时,分配的字节数会记录在某处(这不是标准所指定的,并且取决于实现)。无论如何,当你调用delete时,会引用这个字节数,这就是系统知道要释放多少字节的方法,即使你没有告诉它。簿记是在幕后完成的。

答案 1 :(得分:0)

正如ildjarn和Duck在评论中已经说过,答案是肯定的。

MyData * p;
p = new MyData;
delete (p);     // <- Yes, this frees the memory used for MyData.