C++ 删除指针指向的结构中的数据的正确用法

C++ 删除指针指向的结构中的数据的正确用法,c++,pointers,delete-operator,C++,Pointers,Delete Operator,我试图理解释放指向的内存的正确方法。在本例中,指针指向结构的新实例。下面是一个例子 结构如下: struct MyData { unsigned short int MYID; unsigned short int MYCMD; }; 定义如下 MyData* injdataRx; myDataPtr = new MyData; // create new instance …执行一些操作,将值加载

我试图理解释放指向的内存的正确方法。在本例中,指针指向结构的新实例。下面是一个例子

结构如下:

    struct MyData
    {
        unsigned short int MYID;    
        unsigned short int MYCMD;    
    }; 
定义如下

    MyData* injdataRx;

    myDataPtr = new MyData;  // create new instance
…执行一些操作,将值加载到指针指向的字段中

现在,如果我完成了这个结构,并且我想确保指针指向的(分配的区域)被释放,我会这样做

    delete (myDataPtr);
这是否释放了由“new”创建的内存,因为它知道myDataPtr是指向MyData类型的指针,所以它将释放MyData的大小?是这样吗


感谢您为澄清这一点提供的任何帮助。

正如ildjarn和Duck在评论中所说的,答案是肯定的

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

删除(p);// 是的。基本上,当您调用new时,分配的字节数会记录在某个地方(这不是标准指定的,取决于实现)。无论如何,当您调用delete时,这个字节数被引用,这就是系统如何知道要释放多少字节,即使您没有告诉它。簿记是在幕后进行的

这会释放“new”创建的内存吗?因为它知道myDataPtr是指向MyData类型的指针,它会释放MyData的大小吗?是的,并调用对象的析构函数。就是这样。最困难的是要记住总是删除它。或者使用智能指针。