在c ++中有指针的析构函数吗?

jia*_*afu 4 c++ pointers

string * str=new string;
delete str;
Run Code Online (Sandbox Code Playgroud)

当我删除指向一个对象的'str'时,会调用两个析构函数 - 一个用于指针本身,一个用于指向它的对象?

指针的析构函数会做什么?

Jos*_*eld 15

delete只是导致给定指针指向的对象被销毁(在这种情况下,string对象.指针本身,由表示str,具有自动存储持续时间,并且当它超出范围时将被销毁,就像任何其他局部变量一样.

但请注意,非类类型没有析构函数.因此,即使您使用delete非类型类型,也不会调用析构函数,但是指针超出范围时,它会像通常与任何其他自动变量一样被破坏(意味着指针刚刚到达其生命周期的末尾,尽管内存指向指针不释放,直到您使用delete显式释放它.).

  • @rubenvb移动堆栈指针与破坏无关.通常通过更改堆栈指针来分配和释放本地变量的存储.它通常也在函数的开始和结束时完成,而不是在标准实际需要时(在"as if"规则下). (2认同)