jbu*_*jbu 14 c++ memory memory-leaks new-operator
以下C++代码是内存泄漏吗?
list.push_back(new String("hi"));
Run Code Online (Sandbox Code Playgroud)
据我了解,来自任何std集合/容器的push_back总是复制.因此,如果复制新字符串,没有什么可以删除新的字符串吗?因为push_back之后没有引用它...
我在这里是对还是错?
谢谢.
JBU
编辑:我认为我错了,因为new会返回一个指针......我们总是会有指针能够删除新的String
是的,但不是你想的原因.
根据list定义和初始化的方式,push_back可能会抛出异常.如果是这样,返回的指针将new丢失,永远不会被释放.
不过,假设push_back成功返回,它存储指针的一个拷贝回来的new,所以我们可以在以后通过调用释放内存delete上复制,所以只要你没有内存泄漏也叫delete正常.
不,向量存储指针,副本由指针组成.您可以在以后随时删除该对象.
(如果语句碰巧抛出异常并且你没有正确捕获并处理它,你可能会泄漏.这就是为什么你可以考虑使用智能指针.)
| 归档时间: |
|
| 查看次数: |
12219 次 |
| 最近记录: |