【发布时间】:2015-07-20 20:43:16
【问题描述】:
请解释一下,接下来的事情。
#include <iostream>
#include <set>
int main() {
std::set<int>* a = new std::set<int>;
a->insert(2);
a->insert(5);
for ( std::set<int>::iterator it = a->begin(); it != a->end(); it++ ) {
std::cout << *it << std::endl;
}
std::cout << "Deleting a....." << std::endl;
delete a;
for ( std::set<int>::iterator it = a->begin(); it != a->end(); it++ ) {
std::cout << *it << std::endl;
}
return 0;
}
$ g++ test6.cpp && a
2
5
Deleting a.....
2
5
3544585
- 使用运算符 new 创建 std::set 是否有意义?正如我在手册中所读到的,std::set 有自己的 Allocator 对象,它负责使用运算符 new 进行动态内存分配。但有趣的是了解有经验的会员的观点。
- 为什么在使用 delete a 释放内存后,std::set 的成员仍然可用,并且像 delete a。以及删除成员 a 的正确方法是什么。 谢谢。
【问题讨论】:
-
在这种情况下,不,完全不需要。
-
stackoverflow.com/a/6445794/2756719 解决了类似的情况。
-
在(现代)C++ 中,任何事情都不需要使用
new。