关于c++智能指针shared_ptr的一些疑惑

2025-02-25 20:49:01
推荐回答(3个)
回答1:

不要用自己的方式瞎摸索, 你这都是违规行为,多看看书.

第一种方式资源会自动销毁.
第二中方式, p = t 没法通过编译的.

给你几条建议:
不要这么喜欢malloc, 使用new/delete
shared_ptr<>是基于RAII思想( resource aquisition is initialization ), 所以你要这样
share_ptr sp( new int ) 这种方式去初始化智能指针.
使用sp->这样方式去引用资源, 而不是raw ptr = sp.get(),

回答2:

这个两种方式在p的生命周期完成后都会释放,t都会变成了野指针。
另外这种写法是有问题的,shared_ptr默认使用delete释放内存,而用malloc生气的内存应该用free释放。可以改为使用new申请内存,或者自定义shared_ptr的删除函数,改为使用free

回答3:

一切只malloc不free和只new不delete[]的行为都是耍流氓.