我注意到多个问题,C++ 专家询问 std::string/std::map/etc。不应使用“new”关键字创建(C++ 的新手,如果不明显的话)。
所以,如果我的理解是正确的,这不会在堆上创建它,而是在堆栈上创建。这意味着一旦函数超出范围,对象就会消失,但我认为事实并非如此,我的理解是错误的。
这是因为底层模板在堆上实例化它并使用 auto_ptr 对其进行管理,因此不会导致内存泄漏?这适用于所有 stl 课程吗?
此外,一个后续问题是创建插入地图的对象的方法应该是什么?它们是否应该在堆上分配(如果它们在函数范围之外有价值)?
编辑:
我确实了解堆和堆栈之间的区别以及使用它们的原因(我可能不清楚这一点)。
我要求这样做的原因是它似乎不自然,只是在堆栈上为我想保留的对象实例化一个对象。但是,我想这就是语法的样子。
这意味着,当我写作时,我觉得我在堆栈上有些东西,
std::map<int,int> mymap;
代替,
std::map<int,int> *mymap = new std::map<int,int>;
我也想知道这对内存的影响。既然现在内存是由这个实现自己清理的,是不是类似于Java中的垃圾收集?使用 stl 对象时是否存在隐含的性能影响?