void test(int *q)
{
std::shared_ptr<const int> ptr(q);
std::cout << *ptr << std::endl;
}
int main(int argc,char *argv[])
{
int *p = new int(3);
test(p);
delete p;
return 0;
}
请问这样会造成内存的重复释放吗?
个人理解:智能指针ptr在函数周期结束后会被释放掉,所以会释放ptr所指向的内存,而主函数中delete会再次释放,但是这段代码能跑通,最后输出3
确实有问题。test运行结束后就会释放int的内存。我机器上能输出3,但会有异常中断。
new 的对象都要手动释放吧,系统不会自动释放。
函数周期结束释放的是指针占用的内存(栈),指针指向地址占用的内存(这里用的new,也就是堆)用delete释放一次。
前后释放的不是同一个块内存,所以是没问题的。
【望采纳】
shared_ptr有计数器的,记录指向资源的指针数,为0才会释放资源,这个函数结束是不会释放的
您好,我是有问必答小助手,你的问题已经有小伙伴为您解答了问题,您看下是否解决了您的问题,可以追评进行沟通哦~
如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~
ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632