草庐IT

expose_new

全部标签

c++ - new char[10] 和 new char(10) 有什么区别

在C++中,有什么区别char*a=newchar[10];和char*a=newchar(10);谢谢! 最佳答案 第一个分配10个字符的数组。第二个分配一个初始化为10的字符。或者:第一个应替换为std::vector,第二个应该放入智能指针中。 关于c++-newchar[10]和newchar(10)有什么区别,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/3902011

c++ - 是否可以完全禁用默认的 C++ new 运算符?

因为我们的应用程序有硬性能和内存限制,我们的编码标准禁止使用默认堆——即没有malloc,没有默认new。每个内存分配都必须选择几个特定分配器之一;像//declaredgloballyvoid*operatornew(size_tsize,CustomAllocHeap*heap,constchar*perpetrator_name){returnheap->Allocate(size,perpetrator_name);}//imagineabunchofCustomAllocHeap'sdeclaredgloballyorstatically,thusVector*v=new(g

c++ - 是否可以完全禁用默认的 C++ new 运算符?

因为我们的应用程序有硬性能和内存限制,我们的编码标准禁止使用默认堆——即没有malloc,没有默认new。每个内存分配都必须选择几个特定分配器之一;像//declaredgloballyvoid*operatornew(size_tsize,CustomAllocHeap*heap,constchar*perpetrator_name){returnheap->Allocate(size,perpetrator_name);}//imagineabunchofCustomAllocHeap'sdeclaredgloballyorstatically,thusVector*v=new(g

c++ - 如何防止通过 'new' 运算符分配类? (我想确保我的 RAII 类始终分配在堆栈上。)

我想确保我的RAII类始终分配在堆栈上。如何防止通过“new”运算符分配类? 最佳答案 您需要做的就是将类的新运算符声明为私有(private):classX{private://Preventheapallocationvoid*operatornew(size_t);void*operatornew[](size_t);voidoperatordelete(void*);voidoperatordelete[](void*);//...//TherestoftheimplementationforX//...};将“operat

c++ - 如何防止通过 'new' 运算符分配类? (我想确保我的 RAII 类始终分配在堆栈上。)

我想确保我的RAII类始终分配在堆栈上。如何防止通过“new”运算符分配类? 最佳答案 您需要做的就是将类的新运算符声明为私有(private):classX{private://Preventheapallocationvoid*operatornew(size_t);void*operatornew[](size_t);voidoperatordelete(void*);voidoperatordelete[](void*);//...//TherestoftheimplementationforX//...};将“operat

c++ - 谁删除了在构造函数中有异常的 "new"操作期间分配的内存?

我真的不敢相信我找不到一个明确的答案......在使用new操作符初始化的情况下,如何释放C++类构造函数引发异常后分配的内存。例如:classBlah{public:Blah(){throw"oops";}};voidmain(){Blah*b=NULL;try{b=newBlah();}catch(...){//Whatnow?}}当我尝试这个时,b在catchblock中为NULL(这是有道理的)。在调试时,我注意到控制在到达构造函数之前进入了内存分配例程。MSDN网站上的seemstoconfirmthis:WhennewisusedtoallocatememoryforaC+

c++ - 谁删除了在构造函数中有异常的 "new"操作期间分配的内存?

我真的不敢相信我找不到一个明确的答案......在使用new操作符初始化的情况下,如何释放C++类构造函数引发异常后分配的内存。例如:classBlah{public:Blah(){throw"oops";}};voidmain(){Blah*b=NULL;try{b=newBlah();}catch(...){//Whatnow?}}当我尝试这个时,b在catchblock中为NULL(这是有道理的)。在调试时,我注意到控制在到达构造函数之前进入了内存分配例程。MSDN网站上的seemstoconfirmthis:WhennewisusedtoallocatememoryforaC+

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

我知道根据C++标准,如果new分配内存失败,它应该抛出std::bad_alloc异常。但我听说一些编译器,如VC6(或CRT实现?)不遵守它。这是真的?我问这个是因为在每个新语句之后检查NULL会使代码看起来非常难看。 最佳答案 VC6在这方面默认是不合规的。VC6的new返回0(或NULL)。这里是微软关于这个问题的知识库文章以及他们建议的使用自定义new处理程序的解决方法:Operatornewdoesnotthrowabad_allocexceptiononfailureinVisualC++如果您有为VC6行为编写的旧代

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

我知道根据C++标准,如果new分配内存失败,它应该抛出std::bad_alloc异常。但我听说一些编译器,如VC6(或CRT实现?)不遵守它。这是真的?我问这个是因为在每个新语句之后检查NULL会使代码看起来非常难看。 最佳答案 VC6在这方面默认是不合规的。VC6的new返回0(或NULL)。这里是微软关于这个问题的知识库文章以及他们建议的使用自定义new处理程序的解决方法:Operatornewdoesnotthrowabad_allocexceptiononfailureinVisualC++如果您有为VC6行为编写的旧代

c++ - 我应该如何编写符合 ISO C++ 标准的自定义 new 和 delete 运算符?

我应该如何编写符合ISOC++标准的自定义new和delete运算符?这是Overloadingnewanddelete的延续在极具启发性的C++常见问题解答中,Operatoroverloading,及其后续,Whyshouldonereplacedefaultnewanddeleteoperators?第1部分:编写符合标准的new运算符Part1:UnderstandingtherequirementsforwritingacustomnewoperatorPart2:Understandingthenew_handlerrequirementsPart3:Understandi