我在使用std :: list <std :: string>时偶然发现Stack Overflow问题内存泄漏与std :: string,其中一条评论说:
停止使用
new这么多.我看不出你在任何地方使用新的任何理由.您可以使用C++中的值创建对象,这是使用该语言的巨大优势之一.您不必在堆上分配所有内容.不要像Java程序员那样思考.
我不太确定他的意思是什么.为什么要尽可能经常地用C++中的值创建对象,它在内部有什么区别?我误解了答案吗?
我正在使用http://www.learncpp.com上的教程学习c ++ .在使用new和delete(http://www.learncpp.com/cpp-tutorial/69-dynamic-memory-allocation-with-new-and-delete/)的动态内存分配课程中,它指出:
类似地,当删除动态分配的变量时,指向它的指针不为零.请考虑以下代码段:
int *pnValue = new int;
delete pnValue; // pnValue not set to 0
if (pnValue)
*pnValue = 5; // will cause a crash
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试它(编译器:GNU GCC编译器,ubuntu)时,我的程序不会崩溃.
int *pnValue = new int;
delete pnValue; // pnValue not set to 0
if (pnValue)
*pnValue = 5; // will cause a crash -> doesn't
std::cout << "Did not crash" << std::endl;
Run Code Online (Sandbox Code Playgroud)
这里发生了什么?在C++中是否有任何形式的运行时检查?