草庐IT

new_elem

全部标签

c++ - 当使用 malloc 而不是 new 时,类成员会发生什么情况?

我正在为期末考试学习,我偶然发现了一个奇怪的问题,这是我们老师去年给一些可怜的人的考试的一部分。问题是这样的:Isthefollowingprogramcorrect,ornot?Ifitis,writedownwhattheprogramoutputs.Ifit'snot,writedownwhy.程序:#includeclasscls{intx;public:cls(){x=23;}intget_x(){returnx;}};intmain(){cls*p1,*p2;p1=newcls;p2=(cls*)malloc(sizeof(cls));intx=p1->get_x()+p2

c++ - 错误 C2248 : 'std::basic_ios<_Elem,_Traits>::basic_ios' : cannot access private member declared in class 'std::basic_ios<_Elem,_Traits>'

收到此错误,我很确定它在operatorvoidCRational::print()const{print(cout);}voidCRational::print(ostream&sout)const{if(m_denominator==1)cout 最佳答案 您需要通过引用而不是值返回ostream。它试图调用构造函数。也可以传递'a'作为引用:ostream&operator我还注意到打印方法可能是错误的。它有sout作为流的名称传递,但随后直接使用cout实现。应该是voidCRational::print(ostream&s

c++ - 为什么虚拟函数在分配给 'new' 时不能未实现?

structA{virtualvoidfoo();//unusedandunimplementedvirtualvoidbar(){}};intmain(){Aobj;//okobj.bar();//对于堆栈上的对象itworksfine.但是对于使用new(不是malloc)在堆上分配,它会给出链接器错误:undefinedreferenceto`vtableforA' 最佳答案 因为malloc不调用(或在这种情况下尝试调用)A的构造函数,而new调用。此代码编译并记录GCC链接器错误发生的位置:#includestructA{

c++ - "int *a = new int"和 "int *a = new int()"有什么区别?

这个问题在这里已经有了答案:Dotheparenthesesafterthetypenamemakeadifferencewithnew?(7个答案)关闭9年前。下面两行有什么区别?int*a=newint;int*a=newint();

c++ - char 数组作为 placement new 的存储

以下是否具有明确定义的行为的合法C++?classmy_class{...};intmain(){charstorage[sizeof(my_class)];new((void*)storage)my_class();}或者由于指针转换/对齐方面的考虑,这是有问题的吗? 最佳答案 是的,这是有问题的。您根本无法保证内存正确对齐。虽然存在各种技巧来获得正确对齐的存储,但您最好使用Boost或C++0x的aligned_storage,它们对您隐藏了这些技巧。那么你只需要://C++0xtypedefstd::aligned_stora

c++ - 在 C++11 中,如何调用 new 并为对象预留足够的内存?

我有一个这样描述的类:classFoo{intsize;intdata[0];public:Foo(int_size,int*_data):size(_size){for(inti=0;i我无法更改该类的设计。如何创建该类的实例?在调用构造函数之前,我必须让它预留足够的内存来存储它的数据,所以它必须在堆上,而不是在栈上。我想我想要类似的东西Foo*place=static_cast(malloc(sizeof(int)+sizeof(int)*size));*place=newFoo(size,data);//Imean:"usethememoryallocatedinplacetod

c++ - 为什么 C++ 编译器不消除 new 返回的指针的空检查?

最近我在ideone.com(gcc-4.3.4)上运行了以下代码#include#include#include#includeusingnamespacestd;void*operatornew(size_tsize)throw(std::bad_alloc){void*ptr=malloc(2*1024*1024*1024);printf("%p\n",ptr);returnptr;}voidoperatordelete(void*ptr){free(ptr);}intmain(){char*ptr=newchar;if(ptr==0){printf("unreachable\n

c++ - 除了分配和 ctor 调用之外,C++ new 运算符还做什么?

除了分配内存和调用构造函数之外,new运算符还做了哪些其他事情? 最佳答案 C++标准对来自的new运算符的单个对象形式(通常使用的形式)有这样的说法。header:Requiredbehavior:Returnanonnullpointertosuitablyalignedstorage(3.7.3),orelsethrowabad_allocexception.Thisrequirementisbindingonareplacementversionofthisfunction.Defaultbehavior:—Executes

c++ - 我可以告诉在 C++ 中使用 "new type[n]"创建的数组的大小吗?

使用C++11,我喜欢创建一个bool数组并立即清除它bool*mymap=newbool[n];n是可变的。现在,这是否已经清除了数组占用的内存?如果不是,是否有比对所有元素使用循环并将每个元素分别设置为false更好的方法来清除数组?我考虑过使用std:memset(),但这需要我知道数组的大小。现在,初学者可能会说:简单,大小是n*sizeof(bool)。但我不买那个。编译器可能决定以不同方式打包它们,甚至将它们打包为位,不是吗?那么,有没有办法更清楚地告诉数组的大小呢?我想可能有一个std:arraysize()函数,它只返回内存中分配的数组的空间。毕竟,必须以某种方式在运行

C++ new * char 不为空

我有一个问题。我在ASIO中开发服务器,数据包在尖角字符中。当我创建新的char(例如char*buffer=newchar[128];)时,我必须手动将其清除为null。通过:for(inti=0;i我做错了什么,那个字符不清楚? 最佳答案 您不必遍历未初始化值的数组。您可以像这样动态实例化零数组:char*buffer=newchar[128]();//allelementssetto0^^ 关于C++new*char不为空,我们在StackOverflow上找到一个类似的问题: