【发布时间】:2013-07-17 19:44:16
【问题描述】:
在下面的代码部分中,交换后的结果内存结构是什么?是否会因为它们交换了下面的内存地址而导致泄漏?会不会因为他们做了一个深拷贝?如果这段代码被困在一个类中,而我正在用一块动态内存交换一个工作缓冲区怎么办?
#include <iostream>
#include <vector>
int main()
{
std::vector<std::string> * ptr_str_vec =
new std::vector<std::string>();
ptr_str_vec->push_back("Hello");
std::vector<std::string> str_vec;
str_vec.push_back("World");
ptr_str_vec->swap(str_vec);
delete ptr_str_vec;
//What would be the resulting structures?
return 0;
}
编辑:发布了稍微错误的代码。修复了错误。
【问题讨论】:
-
因为你
newed 了一些东西而没有调用delete,所以存在泄漏。 -
假设 ptr_str_vec 被删除,是否还有泄漏?
-
您显然在调试器下尝试过此操作并亲眼看到了答案。真正的问题是什么?
-
vector::swap交换向量的内容;您的代码中不存在交换向量的地址这样的事情。 -
不,不会有泄漏。
标签: c++ pointers memory-leaks new-operator stdvector