草庐IT

expose_new

全部标签

c++ - 为什么 C++ 不需要 "new"语句来初始化 std::vector?

考虑:/*bar.h*/classbar{/*Standardstuffomitted*/std::vectorfoo;};/*bar.cpp*/bar::bar(){//foo=newstd::vector();为什么即使我们没有为foo分配一个新的std::vector实例,这段代码仍然有效? 最佳答案 因为C++不是C#/Java。std::vectorfoo;这是一个对象的定义,而不是C#/Java中的引用。对象是类型的一个活生生的实例。newstd::vector()这个表达式返回一个指针。它返回一个std::vector

c++ - new[] 是否在 C++ 中调用默认构造函数?

当我使用new[]创建一个类数组时:intcount=10;A*arr=newA[count];我看到它调用了Acount次的默认构造函数。结果arr具有count个初始化的A类型的对象。但是如果我用同样的东西来构造一个int数组:int*arr2=newint[count];它没有被初始化。所有值都类似于-842150451尽管int的默认构造函数将其值分配给0。为什么会有如此不同的行为?默认构造函数不只为内置类型调用吗? 最佳答案 见theacceptedanswer至averysimilarquestion.当您使用new[]

c++ - new[] 是否在 C++ 中调用默认构造函数?

当我使用new[]创建一个类数组时:intcount=10;A*arr=newA[count];我看到它调用了Acount次的默认构造函数。结果arr具有count个初始化的A类型的对象。但是如果我用同样的东西来构造一个int数组:int*arr2=newint[count];它没有被初始化。所有值都类似于-842150451尽管int的默认构造函数将其值分配给0。为什么会有如此不同的行为?默认构造函数不只为内置类型调用吗? 最佳答案 见theacceptedanswer至averysimilarquestion.当您使用new[]

c++ - "sizeof new int;"是未定义的行为吗?

代码:#includeusingnamespacestd;intmain(){size_ti=sizeofnewint;cout在GCC编译器中,工作正常,没有任何警告或错误,并打印输出8.但是,在clang编译器中,我收到了以下警告:warning:expressionwithsideeffectshasnoeffectinanunevaluatedcontext[-Wunevaluated-expression]size_ti=sizeofnewint;哪一个是真的?sizeofnewint;是未定义的行为吗? 最佳答案 警告没

c++ - "sizeof new int;"是未定义的行为吗?

代码:#includeusingnamespacestd;intmain(){size_ti=sizeofnewint;cout在GCC编译器中,工作正常,没有任何警告或错误,并打印输出8.但是,在clang编译器中,我收到了以下警告:warning:expressionwithsideeffectshasnoeffectinanunevaluatedcontext[-Wunevaluated-expression]size_ti=sizeofnewint;哪一个是真的?sizeofnewint;是未定义的行为吗? 最佳答案 警告没

c++ - 是否有任何有效的用例可以在现代 C++ 中使用 new 和 delete、原始指针或 c 样式数组?

Here'sanotablevideo(StopteachingC)aboutthatparadigmchangetotakeinteachingthec++language.还有一篇值得注意的博文Ihaveadream...I'mdreamingofsocalledC++courses/classes/curriculaewillstopteaching(requiring)theirstudentstouse:...由于C++11作为既定标准,我们有Dynamicmemorymanagement设施又名智能指针。即使从早期的标准我们也有c++标准Containerslibrary作

c++ - 是否有任何有效的用例可以在现代 C++ 中使用 new 和 delete、原始指针或 c 样式数组?

Here'sanotablevideo(StopteachingC)aboutthatparadigmchangetotakeinteachingthec++language.还有一篇值得注意的博文Ihaveadream...I'mdreamingofsocalledC++courses/classes/curriculaewillstopteaching(requiring)theirstudentstouse:...由于C++11作为既定标准,我们有Dynamicmemorymanagement设施又名智能指针。即使从早期的标准我们也有c++标准Containerslibrary作

c++ - 为什么语言中内置了非放置 `new` 和 `delete` 而不仅仅是常规函数?

为什么没有展示newexpression和deleteexpression实现为语言内置而不是常规函数?如果我们有...向操作系统请求/归还内存的一种方式一种显式调用构造函数的方式(placementnew)一种显式调用析构函数的方式(~T())...为什么非放置new和delete不能只是标准库中的常规函数​​?示例:templateT*library_new(Ts&&...xs){auto*ptr=/*requestenoughmemoryfor`T`fromOS*/;new(ptr)T(std::forward(xs)...);returnptr;}templatevoidlib

c++ - 为什么语言中内置了非放置 `new` 和 `delete` 而不仅仅是常规函数?

为什么没有展示newexpression和deleteexpression实现为语言内置而不是常规函数?如果我们有...向操作系统请求/归还内存的一种方式一种显式调用构造函数的方式(placementnew)一种显式调用析构函数的方式(~T())...为什么非放置new和delete不能只是标准库中的常规函数​​?示例:templateT*library_new(Ts&&...xs){auto*ptr=/*requestenoughmemoryfor`T`fromOS*/;new(ptr)T(std::forward(xs)...);returnptr;}templatevoidlib

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