草庐IT

c++ - 删除指向指针的指针(作为数组数组)

我的代码中有这个:double**desc=newdouble*[size_out];for(inti=0;i如何删除这个desc?我应该这样做:delete[]desc;或for(inti=0;i或for(inti=0;i? 最佳答案 要遵循的简单规则:对于每个分配,都必须有一个释放(因此ex1是错误的)使用new分配的内容应该使用delete释放,使用new[]应该使用delete[]和使用malloc应该使用free释放(因此ex3是错误的)结论,ex2是可以的。 关于c++-删除

c++ - 对类中的方法正确使用 `= delete`

对于取消定义一个类的所有其他生成的方法和构造函数,以下代码段是否正确?structPicture{//'explicit':noaccidentalcastfromstringtoPictureexplicitPicture(conststring&filename){/*loadimagefromfile*/}//noaccidentalconstruction,i.e.temporariesandthelikePicture()=delete;//nocopyPicture(constPicture&)=delete;//noassignPicture&operator=(cons

c++ - 对类中的方法正确使用 `= delete`

对于取消定义一个类的所有其他生成的方法和构造函数,以下代码段是否正确?structPicture{//'explicit':noaccidentalcastfromstringtoPictureexplicitPicture(conststring&filename){/*loadimagefromfile*/}//noaccidentalconstruction,i.e.temporariesandthelikePicture()=delete;//nocopyPicture(constPicture&)=delete;//noassignPicture&operator=(cons

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++ 指针数组 : delete or delete []?

考虑以下代码:classFoo{Monster*monsters[6];Foo(){for(inti=0;i什么是正确的析构函数?这个:Foo::~Foo(){delete[]monsters;}或者这个:Foo::~Foo(){for(inti=0;i我目前有最上面的构造函数,一切正常,但我当然看不到它是否恰好在泄漏......就我个人而言,考虑到我正在做的事情,我认为第二个版本更合乎逻辑。无论如何,这样做的“正确”方法是什么? 最佳答案 删除[]怪物;不正确,因为monsters不是指向动态分配数组的指针,它是指针数组。作为类成

C++ 指针数组 : delete or delete []?

考虑以下代码:classFoo{Monster*monsters[6];Foo(){for(inti=0;i什么是正确的析构函数?这个:Foo::~Foo(){delete[]monsters;}或者这个:Foo::~Foo(){for(inti=0;i我目前有最上面的构造函数,一切正常,但我当然看不到它是否恰好在泄漏......就我个人而言,考虑到我正在做的事情,我认为第二个版本更合乎逻辑。无论如何,这样做的“正确”方法是什么? 最佳答案 删除[]怪物;不正确,因为monsters不是指向动态分配数组的指针,它是指针数组。作为类成

C++ 删除语法

我遇到了“删除”这个相当不寻常的用法。只是想知道以下行是删除两个指针还是只删除第一个?deleteptr1,ptr2 最佳答案 这无疑是一个错误。这里的逗号是逗号操作符,不是分隔符。只有第一个指针ptr1被删除。第二个指针,ptr2,只是一个什么都不做的表达式。delete操作符的优先级高于,操作符,因此表达式被解析为就像它是写的一样:(deleteptr1),(ptr2)不像是写出来的:delete(ptr1,ptr2)如果,的优先级高于delete,则只有second指针会被删除。