相关疑难解决方法(0)

在任何情况下new都会返回NULL吗?

我知道根据C++标准,如果新的无法分配内存,它应该抛出std :: bad_alloc异常.但我听说有些编译器如VC6(或CRT实现?)不遵守它.这是真的 ?我问这个是因为在每个新语句之后检查NULL会使代码看起来非常难看.

c++ memory-management visual-c++-6 new-operator visual-c++

52
推荐指数
3
解决办法
4万
查看次数

测试C++中"new"的返回是否有用?

我通常从未在C++中看到新测试,我想知道为什么.

Foo *f = new Foo;

// f is assumed as allocated, why usually, nobody test the return of new?

c++ new-operator

24
推荐指数
3
解决办法
3164
查看次数

捕获std :: bad_alloc的策略

所以我在开发中使用Qt并且非常喜欢它.Qt对象的通常设计模式是使用它们来分配它们new.

几乎所有示例(尤其是Qt设计器生成的代码)都不会检查std::bad_alloc异常.由于分配的对象(通常是小部件等)很小,因此这几乎不成问题.毕竟,如果你没有分配20个字节之类的东西,那么你可以做的事情并不多,无法解决问题.

目前,我采用了一种策略,即在try/catch中包装"large"(大小超过一页或两页)分配.如果失败了,我会向用户显示一条消息,几乎任何更小的消息,我只会让应用程序崩溃并出现std::bad_alloc异常.

所以,我想知道这方面的思想是什么?

检查每一项new操作是否是好政策?或者只有我希望有可能失败的?

此外,在处理资源可能受到更多限制的嵌入式环境时,这显然是一个完全不同的故事.我在桌面应用程序的上下文中询问,但也会对涉及其他场景的答案感兴趣.

c++ coding-style try-catch new-operator

12
推荐指数
3
解决办法
9197
查看次数

您多久检查一次C++新指令中的异常?

我今天刚开始阅读Effective C++并且到了作者谈论operator new的地步.

这本书很好地解释了如何捕获(具有不同程度的优雅)std :: bad_alloc异常,如果内存不足,操作员可以引发该异常.

我的问题是:当没有足够的内存来实例化一个对象时,你经常检查一下这个案例,如果有的话?为什么?麻烦值得吗?

c++ exception

8
推荐指数
2
解决办法
2231
查看次数

什么时候适合使用C++异常?

我正在尝试设计一个需要动态分配一些内存的类.

我曾计划在构建期间分配它所需的内存,但是如何处理失败的内存分配?我应该抛出异常吗?我在某处读到异常应仅用于"特殊"情况,而内存耗尽对我来说似乎不是特例.

我应该在单独的初始化例程中分配内存并检查故障,然后优雅地销毁类实例吗?

或者我应该使用例外吗?如果这些内存分配失败,该类将没有任何用处.


编辑:共识似乎是内存不足是一个例外情况.

会看到如何去做这个..谢谢.. :)

c++ memory error-handling exception raii

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