草庐IT

new_size

全部标签

c++ - size_type 可以大于 std::size_t 吗?

带有std::allocator的标准容器有它们的size_typedefinedasstd::size_t.但是,是否可以有一个分配器来分配大小不能用size_t表示的对象?换句话说,size_type可以大于size_t吗? 最佳答案 是的,这在某些情况下可能很有用。假设您有一个程序希望访问比虚拟内存容量更大的存储空间。通过创建引用内存映射存储的分配器并在间接pointer对象时根据需要对其进行映射,您可以访问任意大量内存。这仍然符合18.2:6,因为size_t被定义为足够大以包含任何对象的大小,但17.6.3.5:2表28将

c++ - "new int(100)"有什么作用?

PossibleDuplicate:isthisavariableorfunction我错误地使用了类似的东西:int*arr=newint(100);它通过了编译,但我知道这是错误的。应该是int*arr=newint[100];我写错了编译器会怎么想? 最佳答案 第一行分配一个int并将其初始化为100。想想int(100)作为构造函数调用。由于这是一个标量分配,尝试访问arr[1]或使用delete[]释放内存将导致未定义的行为。 关于c++-"newint(100)"有什么作用?

c++ - malloc 和放置 new vs. new

过去几天我一直在研究这个问题,到目前为止,除了教条式的论点或诉诸传统(即“这是C++方式!”)之外,我还没有真正找到任何令人信服的东西。如果我正在创建一个对象数组,那么使用的令人信服的原因(除了易用性)是什么:#defineMY_ARRAY_SIZE10//...my_object*my_array=newmy_object[MY_ARRAY_SIZE];for(inti=0;i超过#defineMEMORY_ERROR-1#defineMY_ARRAY_SIZE10//...my_object*my_array=(my_object*)malloc(sizeof(my_object)

c++ - 为什么 C++ 标准算法 "count"会返回一个 difference_type 而不是 size_t?

为什么返回类型是std::countdifference_type迭代器(通常是ptrdiff_t)。由于计数永远不会是负数,所以size_t技术上正确的选择?如果计数超出ptrdiff_t的范围怎么办?因为数组的理论可能大小可以是size_t?编辑:到目前为止,对于函数返回ptrdiff_t的原因,还没有合适的答案。.从下面的答案中收集到的一些解释是返回类型是iterator_traits::difference_type这是通用的,可以是任何东西。直到那时,它才有意义。在某些情况下,计数可能会超过size_t.但是,返回类型为什么是typedefptrdiff_titerator_

c++ - 为什么 new[] 表达式会调用析构函数?

来自C++17标准(草案here),[expr.new]:Ifthenew-expressioncreatesanobjectoranarrayofobjectsofclasstype,accessandambiguitycontrolaredonefortheallocationfunction,thedeallocationfunction,andtheconstructor.Ifthenew-expressioncreatesanarrayofobjectsofclasstype,thedestructorispotentiallyinvoked.new[]为什么会调用析构函数?

c++ - std::shared_ptr 初始化:make_shared<Foo>() vs shared_ptr<T>(new Foo)

这个问题在这里已经有了答案:Differenceinmake_sharedandnormalshared_ptrinC++(8个回答)关闭7年前。两者有什么区别:std::shared_ptrp=std::shared_ptr(newint);和std::shared_ptrp=std::make_shared();?我应该更喜欢哪一个?为什么?P。S.很确定这个问题一定已经回答过了,但我找不到类似的问题。 最佳答案 这两个例子都过于冗长了:std::shared_ptrp(newint);//or'=shared_ptr(newi

c++ - 更正 size_t : %zu or %Iu? 的 printf 格式说明符

我想打印出size_t的值变量使用printf在C++中使用MicrosoftVisualStudio2010(我想在这段特定的代码中使用printf而不是,所以请没有答案告诉我应该使用代替)。根据帖子Platformindependentsize_tFormatspecifiersinc?正确的平台无关方式是使用%zu,但这似乎在VisualStudio中不起作用。VisualStudio文档位于http://msdn.microsoft.com/en-us/library/vstudio/tcxf1dw6.aspx告诉我必须使用%Iu(使用大写i,而不是小写l)。微软没有遵循这里的

c++ - C++ 中何时需要#include <new> 库?

根据thisreference对于operatornew:Globaldynamicstorageoperatorfunctionsarespecialinthestandardlibrary:Allthreeversionsofoperatornewaredeclaredintheglobalnamespace,notinthestdnamespace.ThefirstandsecondversionsareimplicitlydeclaredineverytranslationunitofaC++program:Theheaderdoesnotneedtobeincludedfor

c++ - C++ `new` 运算符可以在现实生活中抛出异常吗?

new操作符在现实生活中能抛出异常吗?如果是这样,除了杀死我的应用程序之外,我还有其他处理此类异常的选项吗?更新:是否有任何现实世界的、新重的应用程序检查故障并在没有内存时恢复?另见:HowoftendoyoucheckforanexceptioninaC++newinstruction?Isitusefultotestthereturnof“new”inC++?WillnewreturnNULLinanycase? 最佳答案 是的,如果分配失败,new可以并且将会抛出。如果内存不足或尝试分配的内存块太大,就会发生这种情况。您可以捕

c++ - 这个 "size of array"模板函数是如何工作的?

这个问题在这里已经有了答案:Howdoesthistemplatemagicdeterminearrayparametersize?(3个回答)关闭2年前。有人能解释一下这段代码是如何工作的吗?我知道这段代码的目的是获取数组的长度,但是不知道这段代码是怎么工作的:templateintGetArrLength(T(&)[size]){returnsize;} 最佳答案 首先让我们剖析参数T(&)[size]。首先从内到外、从右到左、括号组读取声明:它是一个未命名的参数,它是对T类型的大小为size的数组的引用。也就是说,它接受对任何