问题:在没有使用new和delete运算符的情况下,我该如何删除一个对象的内容?(经过大量资料查阅发现显式调用析构函数高风险,上次有一位同学给我提出了这样的建议,不知道对不对。他说:用大括号{}把对象括起来就行了。我对这一点表示有些怀疑)还是希望站内的大佬们可以帮助我,谢谢啦
智能指针 https://blog.csdn.net/flowing_wind/article/details/81301001
对于整个程序使用全局变量,让系统去维护。对于类使用成员变量。。。使用malloc/free也可以动态管理内存。
调用析构函数是 不对的。 因为 new 类似于执行了 malloc分配一块内存出来, 然后执行构造函数, delete 相当于 先执行析构函数、再调用free释放内存。
你同学说的对。
{ 里直接声明 一个对象 ClassA a; }
这样a是一个局部变量。系统自动帮忙创建了对象(会分配内存 调用构造函数), 当作用于结束后,系统就会自动会把它释放,
( 所以不能 把它的地址 return &a 返回回去给外面用,除非是整个拷贝。)
{ ClassA* a;}
这个a不是实例对象, 只是一个局部指针变量,一般分配在栈里(也能编译器把它放在一个寄存器里), 32位机占用4个字节内存, 64位机 栈8个字节。 作用域结束, 自动退栈就行了, 这块内存相当于释放了,后面会被其他步骤用掉的。
**如果问题问了好几遍 还么弄明白, 建议自己去看看书吧。 比如 C++ primer Plus
**
另外,你说用普通方式建立了对象, 怎么建立的, 代码给出来哈。
局部变量 , 局部静态变量, 全局静态变量还是有些不同的。
至少全局静态变量是要程序结束时才会释放。
你的问题描述的不够详细,解答的人未必能理解你说的。最好使用测试代码举例一下