草庐IT

example-new

全部标签

c++ - new char[n] 和 new (char[n]) 的区别

newchar[n]和new(char[n])有什么区别吗?我在生成的代码中有第二种情况,g++(4.8.0)给了我ISOC++doesnotsupportvariable-lengtharraytypes[-Wvla]这让我想到这两个是否相同。newchar[n]表示“分配n类型为char的对象。new(char[n])的意思是“分配1个类型为n字符数组的对象”吗?删除第一个很清楚。我应该用delete还是delete[]删除第二个?还有其他我应该注意的区别吗?当软件的其他部分期待第二种情况时,我可以安全地删除括号并将第二种情况转换为第一种情况吗?代码是由第三方软件生成的(并被软件的

c++ - new char[n] 和 new (char[n]) 的区别

newchar[n]和new(char[n])有什么区别吗?我在生成的代码中有第二种情况,g++(4.8.0)给了我ISOC++doesnotsupportvariable-lengtharraytypes[-Wvla]这让我想到这两个是否相同。newchar[n]表示“分配n类型为char的对象。new(char[n])的意思是“分配1个类型为n字符数组的对象”吗?删除第一个很清楚。我应该用delete还是delete[]删除第二个?还有其他我应该注意的区别吗?当软件的其他部分期待第二种情况时,我可以安全地删除括号并将第二种情况转换为第一种情况吗?代码是由第三方软件生成的(并被软件的

c++ - auto foo = ref new Foo();什么是 "ref"?

我正在观看来自//build/的视频,一些MS开发人员在他们的C++11程序中使用了这样的语法:autofoo=refnewFoo();我了解这一行中除了“ref”之外的所有内容。这是什么意思? 最佳答案 即将推出的VisualC++编译器添加了这种语法来处理WinRT对象(它们又是下一代COM,我们现在经历了什么?COM、DCOM、COM+、ActiveX,...)该行几乎等同于:com_ptr_tfoo=CreateInstance();但是还有一个新版本的com_ptr_t,使用语法Foo^。

c++ - auto foo = ref new Foo();什么是 "ref"?

我正在观看来自//build/的视频,一些MS开发人员在他们的C++11程序中使用了这样的语法:autofoo=refnewFoo();我了解这一行中除了“ref”之外的所有内容。这是什么意思? 最佳答案 即将推出的VisualC++编译器添加了这种语法来处理WinRT对象(它们又是下一代COM,我们现在经历了什么?COM、DCOM、COM+、ActiveX,...)该行几乎等同于:com_ptr_tfoo=CreateInstance();但是还有一个新版本的com_ptr_t,使用语法Foo^。

c++ - 当::operator new 足够时,为什么需要::operator new[]?

众所周知,C++标准定义了两种形式的全局分配函数:void*operatornew(size_t);void*operatornew[](size_t);此外,C++标准草案(18.6.1.2n3797)说:227)Itisnotthedirectresponsibilityofoperatorneworoperatordeletetonotetherepetitioncountorelementsizeofthearray.Thoseoperationsareperformedelsewhereinthearraynewanddeleteexpressions.Thearraynew

c++ - 当::operator new 足够时,为什么需要::operator new[]?

众所周知,C++标准定义了两种形式的全局分配函数:void*operatornew(size_t);void*operatornew[](size_t);此外,C++标准草案(18.6.1.2n3797)说:227)Itisnotthedirectresponsibilityofoperatorneworoperatordeletetonotetherepetitioncountorelementsizeofthearray.Thoseoperationsareperformedelsewhereinthearraynewanddeleteexpressions.Thearraynew

c++ - 使用 new 时将指针转换为 void* 的优势

STL_construct.h有如下功能:templateinlinevoid_Construct(_T1*__p,const_T2&__value){::new(static_cast(__p))_T1(__value);}我想知道为什么需要将__p强制转换为void*,有什么好处吗? 最佳答案 它保证调用预定义的放置new运算符,而不是由带有签名void*operatornew(std::size_t,_T1*)的用户代码添加到全局命名空间的任何重载. 关于c++-使用new时将指针

c++ - 使用 new 时将指针转换为 void* 的优势

STL_construct.h有如下功能:templateinlinevoid_Construct(_T1*__p,const_T2&__value){::new(static_cast(__p))_T1(__value);}我想知道为什么需要将__p强制转换为void*,有什么好处吗? 最佳答案 它保证调用预定义的放置new运算符,而不是由带有签名void*operatornew(std::size_t,_T1*)的用户代码添加到全局命名空间的任何重载. 关于c++-使用new时将指针

c++ - 使用placement new操作符时我真的需要担心对齐吗?

我读到了WhenshouldIworryaboutalignment?但我仍然不知道我是否必须担心放置new运算符返回的未对齐指针-就像在这个例子中一样:classA{public:longdoublea;longlongb;A():a(1.3),b(1234){}};charbuffer[64];intmain(){//(buffer+1)usedintentionallytohavewrongalignmentA*a=new(buffer+1)A();a->~A();}__alignof(A)==4,(buffer+1)未与4对齐。但一切正常——这里有完整的例子:http://id

c++ - 使用placement new操作符时我真的需要担心对齐吗?

我读到了WhenshouldIworryaboutalignment?但我仍然不知道我是否必须担心放置new运算符返回的未对齐指针-就像在这个例子中一样:classA{public:longdoublea;longlongb;A():a(1.3),b(1234){}};charbuffer[64];intmain(){//(buffer+1)usedintentionallytohavewrongalignmentA*a=new(buffer+1)A();a->~A();}__alignof(A)==4,(buffer+1)未与4对齐。但一切正常——这里有完整的例子:http://id