草庐IT

alloc_traits

全部标签

c++ - 捕获 std::bad_alloc 的策略

所以我在开发过程中经常使用Qt并且喜欢它。Qt对象的通常设计模式是使用new分配它们。几乎所有示例(尤其是Qt设计器生成的代码)都绝对不检查std::bad_alloc异常。由于分配的对象(通常是小部件等)很小,这几乎不是问题。毕竟,如果您未能分配20字节之类的内容,那么您可能无法解决问题。目前,我采用了将“大”(大小超过一页或两页的任何内容)分配包装在try/catch中的策略。如果失败,我会向用户显示一条消息,几乎任何更小的消息,我都会让应用程序崩溃并出现std::bad_alloc异常。那么,我想知道这方面的学派是什么?检查每个new操作是否是好的策略?还是只有我认为有可能失败的

c++ - SWIG 包装库中 __cxa_allocate_exception 期间的段错误

在为Ruby开发一个SWIG封装的C++库时,我们在C++代码内的异常处理过程中遇到了无法解释的崩溃。我不确定重新创建问题的具体情况,但它首先发生在调用std::uncaught_exception期间,然后在一些代码更改后,移至__cxa_allocate_exception在异常构造期间。GDB和valgrind都没有提供任何有关崩溃原因的见解。我找到了几个类似问题的引用资料,包括:http://wiki.fifengine.de/Segfault_in_cxa_allocate_exceptionhttp://forums.fifengine.de/index.php?topic

c++ - 当一个类在构造函数中动态分配自己时,为什么会发生堆栈溢出而不是 std::bad_alloc?

我创建了一个使用new递归创建自身的类(只是为了好玩!),预计由于无限动态分配(堆)这将抛出std::bad_alloc溢出)。但是发生堆栈溢出而不是std::bad_alloc。为什么会这样?classOverflow{private:Overflow*overflow;public:Overflow(){overflow=newOverflow();}};intmain(){Overflowoverflow_happens;//stackoverflowhappensinsteadofstd::bad_allocexeption}@Caleth询问如果我将newOverflow()

c++ - "std::bad_alloc": am I using too much memory?

消息:terminatecalledafterthrowinganinstanceof'std::bad_alloc'what():std::bad_alloc我查看了gdb回溯,这是我自己实现的最低级别的方法:/**getanarrayofvec3s,whichwillbeusedforrenderingtheimage*/vec3*MarchingCubes::getVertexNormalArray(){//UsedthesamearraysizetechniqueasgetVertexArray:wewantindicestomatchupvec3*array=newvec3[

c++ - 为什么我不能从 iterator_traits 获取 value_type?

我正在这样做:constintarr[]={1,2,3,4,5,6,7,8,9,10,11,12,13};constautofoo=cbegin(arr);consttypenameiterator_traits::value_typebar=1;我会期待bar有类型int.但是我得到了一个错误:errorC2039:value_type:isnotamemberofstd::iterator_traits这是const的问题吗?我需要去掉那个吗? 最佳答案 这里的问题在于行constautofoo=cbegin(arr);cbeg

c++ - 可以使用 type_traits/SFINAE 来查找类是否定义了成员 TYPE?

我看到了question它允许检查成员函数是否存在,但我试图找出一个类是否具有成员类型。在下面的示例中,两者都评估为“假”,但我想找到一种方法,以便has_bar::value计算结果为假,has_bar::value评估结果为true。这可能吗?#includestructfoo1;structfoo2{typedefintbar;};templateclasshas_bar{typedefcharyes;typedeflongno;templatestaticyescheck(decltype(&C::bar));templatestaticnocheck(...);public:

c++ - C 中 'allocated object having no declared type' 的 C++ 等价物是什么?

我正在用C++为我的VM编写内存管理器。好吧,更准确地说,VM指令将使用嵌入式内存管理器编译成C++。我在处理C方面更加自如,但现在我确实需要对异常处理的原生支持,这几乎是我使用C++的唯一原因。C和C++都有严格的别名规则,即不兼容类型的两个对象不得重叠,C中的union有一个小异常(exception)。但要定义malloc、calloc、alloca等内存分配函数的行为,C标准有以下段落。6.5-6Theeffectivetypeofanobjectforanaccesstoitsstoredvalueisthedeclaredtypeoftheobject,ifany.Allo

c++ - 警告 C4316 : object allocated on the heap may not be aligned 16

重要信息:开发操作系统:Windows8.164位目标操作系统:Windows8.164位IDE:VisualStudio2013专业版语言:C++问题:通过IDE编译我的静态库项目时收到以下警告:warningC4316:...:objectallocatedontheheapmaynotbealigned16我可以简单地忽略此警告...但我假设它的存在是有原因的,并且希望至少了解它的含义以及它对future可能产生的影响。我认为这行代码与问题有关,在我的Win32窗口包装类中调用:m_direct3D=newDirect3D(this);m_direct3D是一个指向我的Direc

c++ - iterator_trait 的典型用例是什么

我是C++新手,所以请多多包涵。我想了解STLiterator_traits.在“C++标准库”一书中,结构iterator_traits定义如下:templatestructiterator_traits{typedeftypenameT::value_typevalue_type;typedeftypenameT::difference_typedifference_type;typedeftypenameT::iterator_categoryiterator_category;typedeftypenameT::pointerpointer;typedeftypenameT::

c++ - 为什么 std::allocator 在 C++17 中丢失了成员类型/函数?

在查看std::allocator时,我看到成员(member):value_type,指针,const_pointer,引用,const_reference,size_type,difference_type,以及rebind已全部弃用。分配器也将不再拥有成员:address、max_size、construct或destroy。为什么会这样?是否与多态分配器有关? 最佳答案 如果您查看therelevantisocpppaper你可以看到你提到的第一个集合现在被认为放在std::allocator_traits中更好。.自从ST