相关疑难解决方法(0)

1730
推荐指数
11
解决办法
54万
查看次数

为什么C++程序员应该尽量减少"新"的使用?

在使用std :: list <std :: string>时偶然发现Stack Overflow问题内存泄漏与std :: string,其中一条评论说:

停止使用new这么多.我看不出你在任何地方使用新的任何理由.您可以使用C++中的值创建对象,这是使用该语言的巨大优势之一.您不必在堆上分配所有内容.不要像Java程序员那样思考.

我不太确定他的意思是什么.为什么要尽可能经常地用C++中的值创建对象,它在内部有什么区别?我误解了答案吗?

c++ heap memory-management c++-faq new-operator

833
推荐指数
13
解决办法
12万
查看次数

在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++中是否有任何形式的运行时检查?

c++ dynamic-memory-allocation

3
推荐指数
1
解决办法
160
查看次数