This one OK (堆heap对象)
List* mylist=new List();
mylist->create("mylist");delete mylist;
This one Fail (栈stack对象)
List* pmylist2;
mylist2.create("mylist2");
pmylist2 = &mylist2;delete pmylist2;
原因是
创建栈对象时会移动栈顶指针以“挪出”适当大小的空间, 再在这个空间上直接调用对应的构造函数以形成一个栈对象, 而当函数返回时会调用其析构函数释放这个对象, 再调整栈顶指针收回那块栈内存,
在这个过程中是不需要operator new/delete操作的, 所以将operator new/delete设置为private不能达到禁止产生栈(stack)对象的目的.
本文探讨了堆heap与栈stack对象的区别,特别是在C++中使用new/delete操作符时的不同行为。通过具体代码示例说明了为何在栈对象上使用delete会导致错误。
558

被折叠的 条评论
为什么被折叠?



