草庐IT

new_size

全部标签

c++ - std::map::size_type 对于 std::map 其 value_type 是它自己的 size_type

我有一个std::map,float>这占用了太多内存,为了使用更少的内存,我决定将唯一字符串映射到整数(例如std::map,其中每个新的唯一字符串都映射到map的当前size()),并将这些整数值用作映射的成对键(例如,std::map,float>)。而不是int,我想用std::map::size_type:usingmap_index=std::map::size_type;std::pairkey;当然,这不会编译,因为我需要为map提供参数列表:vector.cc:14:19:error:invaliduseoftemplate-name`std::map'without

c++ - 如何实现 array::max_size()?

我正在构建自己的array用于娱乐和教育的类模板。C++0x标准草案规定了一个成员函数max_size()对于所有容器为distance(begin(),end())“为了尽可能大的容器”。如何为数组实现这个成员函数?我只是返回std::numeric_limits::max()吗?,还是结果应该取决于元素类型?嗯,都是std::array来自当前的g++和boost::array返回n来自max_size():#include#include#includeintmain(){std::arrayfoo;std::coutbar;std::cout 最佳答

c++ - Object var 和 Object* var = new Object() 的区别

如果我有一个名为Object的类,那么创建一个这样的实例有什么区别:Objectvar;和:Object*var=newObject();? 最佳答案 此处您在堆栈上创建了var:Objectvar;所以在上面,var是实际的对象。此处您在堆上创建var(也称为动态分配):Object*var=newObject()在堆上创建对象时,必须在使用完后对其调用delete。此外,var实际上是一个指针,它保存着类型为Object的对象的内存地址。在内存地址存在实际对象。更多信息:Seemyanswerhereonwhatandwhere

c++ - 为什么我们不能在没有 new 关键字的情况下在 Qt 中创建对象(即在堆栈上)?

为什么我们不能在没有new关键字的情况下在QT中创建对象?通常我们创建指向对象的指针,如下所示:QLabel*ql=newQLabel();ql->show()但我想创建一个这样的对象:QLabelql=QLabel();ql.show()这可能吗? 最佳答案 问题在于Qt控件(标签、按钮)处于层次结构中(例如,按钮属于窗体)。而Qt的实现方式要求当一个对象被销毁时,属于它的所有对象也会被销毁。如果您将对象放在堆栈上(这就是“不使用new关键字创建”的真正调用方式),它们将自动销毁。这是C++的特性,它适用于所有程序。如果您在堆栈上

c++ - 是否可以使用 operator new 从堆以外的其他地方进行分配?

这是我的应用程序的上下文:我正在开发一个使用来自不同设备的RAM的嵌入式系统。一部分在微Controller的内部RAM(128kB)中,另一部分是外部RAM(1MB)。这些内存映射到微Controller的地址空间,但位于非连续区域。内部RAM用于系统堆栈、任务堆栈和堆。外部RAM用于静态分配的数据(池、缓冲区和所有“static...”内容)我正在尝试实现一个简单的内存管理结构,并且作为它的一部分能够创建一个分配器,该分配器可以使用operatornew的分配算法但使用另一个内存源,而不是系统heap而是其他地方的内存区域。你知道这是否可能吗?一个使用示例可以是保留100kB的外部

用于负数组索引的 C++ size_t 和 ptrdiff_t

我很难在size_t之间做出选择和ptrdiff_t对于索引的类型,应该需要能够存储负值。准确地说,在我的代码中我需要实现一个数组。我收到它的长度(在构造函数中)作为size_t的类型,当我重载[]operator我需要索引的类型为ptrdiff_t(而不是size_t),因为我想允许负索引,如本例所示:std::size_tlength=50;MyVectorvec(length);vec[0]=10;MyVectorvec2=vec+1;std::cout上述设计引起的问题是可用索引的范围受限于ptrdiff_t的最大值。,在某些机器上,这个上限小于size_t的最大值。即std:

c++ - 玩具垃圾收集 : Is operator new/delete enough?

我正在研究我的一个学习项目(使用C语言),并考虑将其迁移到C++以获得额外的学习点。它的一部分涉及针对特定对象系列的垃圾收集系统,在C中,我通常会使用大型malloc/mmap并使用简单的天真标记和清除(我可以识别引用和类似的东西)已经)。我的问题是我正在考虑将这个想法转移到C++,但我对我对其内存管理方案的理解不够安全。到目前为止,我考虑分配一个大内存池并在基类上重载运算符new和delete以调用我的内存池的抓取/释放函数,然后让垃圾收集器的清理阶段删除它看到的对象。够了吗?我在这里没有看到的隐藏陷阱是什么?编辑:澄清一下,我已经能够计算出分配对象的生命周期,因此无需使用gcabi

c++ - operator new[] 和非 POD 类型

我正在尝试重载operatornew以跟踪内存分配(用于调试)。我在分配非POD类型的数组时遇到了问题(例如,持有std::string的类的数组)。似乎调用了operatornew来为数组分配内存+用于存储数组长度的8个字节(可能是这样编译器可以在数组时调用正确数量的析构函数被摧毁)。operatornew[]如何确定实际数据将放置在返回地址(POD数组)还是返回地址+8处?(我需要这个以便我可以在结构中搜索指针) 最佳答案 我认为它会以与new[]知道要调用的构造函数相同的方式进行操作:编译器告诉它。编译器会跟踪数据类型并知道它

微信小程序上传时报错message:Error: 系统错误,错误码:80051,source size 2148KB exceed max limit 2MB

问题:微信小程序上传时错误码:80051,sourcesize2248KBexceedmaxlimit2MB问题原因:由于代码中的静态资源图片大小超了200k以及主包的体积超出1.5M解决办法分包tabBar是主包的,不需要分包处理,以下是分包示例项目目录如下首先将login,register、和webview进行分包,通过引入路由的方式进行分包处理router代码如下//router/index.tsconstwebview=require("./webview");constregister=require("./register");constlogin=require("./login

c++ - 在构造函数初始化列表中使用 placement new 的语法是什么

假设我有一个类classMyClassintbuf[10];public:MyClass(inti){new(&buf)OtherClass(i);//Howtomovethistoconstructorinitializelist?}只需将该行复制到之后的位置:不起作用。 最佳答案 我不确定您将如何使用构造的对象;我想MyClass有一个指向对象的数据成员指针,然后像这样初始化指针:classMyClass{intbuf[10];OtherClass*p;public:MyClass(inti):p(new(&buf)OtherC