草庐IT

new_array

全部标签

c++ - 无法直接分配元素 std::array,它说没有运算符 "="匹配

在我的processor类有一个数组.voidProcessor::addJob(Jobjob){this->Jobs[this->uBound]=job;this->uBound++;}我想在我的processor中添加一个新元素类(class)。为此,我创建了新的private:intuBound=0我的属性(property)processor类(class)。我直接分配this->Jobs[this->uBound]=job;.它给了我一个错误。它说Error:nooperator"="matchestheseoperands.operandtypesare:std::arra

c++ - 我是否需要删除使用 new 和 placement 构造的对象

classFoo{//somememberpublic:intbar;}intmain(){char*buffer=newchar[100];Foo*f=new(buffer)Foo();//doihavetodeletef;//orisdelete[]buffer;//enough}当然,如果删除Foo对系统有一些重大影响,我必须删除它,但可以说它是一个简单的存储对象,我将其完全放在缓冲区内并且没有确实删除了一些其他东西的析构函数。我是否必须删除一个放置在新内部的对象是否足以删除缓冲区?如果我必须对缓冲区内的每个对象调用delete,为什么我必须这样做吗?我读到:what-uses-

c++ - 作业 : Making an array using pointers

我正在解决作业问题。我和其他一些学生非常确定我们的老师说错了,但也许不是。我已经检查了这里的一些问题,但无法真正找到使用指针创建本质上是数组的方法。说明如下。重写以下程序以使用指针而不是数组:代码是这样的intmain(){intsalary[20];inti;for(i=0;i>salary[i];}for(i=0;i我的解决方案是这样的:intmain(){int*salary_pointer=newint;for(inti=0;i>*(salary_pointer+i);}for(inti=0;i它一直在salarynumber13左右标记段错误我的主要目的(因为我几乎可以肯定我

c++ - 无法将 unique_ptr 添加到 std::array

在书籍和网上搜索之后,直到我的耳朵之间开始剧烈疼痛,我无法弄清楚如何将std::unique_ptr添加到std::array.以下是类成员:std::array,MAX_ELMS_NUM>m_collection;在.cpp文件中,我试图将填充在std::unique_ptr中的新媒体指针添加到数组中:Media*newMedia=CreateNewMedia(Mediainfostuff);unique_ptrnp(newMedia);m_collection[0]=np;除了最后一行之外的所有内容都可以编译。 最佳答案 最后一

c++ - 使用 new 运算符定义 std::shared_ptr 时出错

我正在尝试通过以下方式使用new运算符定义std::shared_ptr:#includestructA{};intmain(){std::shared_ptrptr=newA();return0;}但我得到了以下编译时错误:main.cpp:Infunction'intmain()':main.cpp:8:30:error:conversionfrom'A*'tonon-scalartype'std::shared_ptr'requestedstd::shared_ptrptr=newA();无论如何,以下绝对有效:std::shared_ptrptr{newA()};有谁知道为什么

c++ - 在 std::array 中重载 operator[]

我想优化我的代码,重载std::array中的方括号[]运算符,我在任何地方都使用它减一。代码编译但从不调用重载函数,谁能告诉我为什么?#include#includeclassA{std::arrayvar{0,1,2,3,4};std::array::value_type&operator[](std::size_tp_index);};std::array::value_type&A::operator[](std::size_tp_index){returnvar[p_index-1];}intmain(){Aa;std::cout代码返回“1”,但我希望返回“0”。提前致谢!

c++ - array::operator[] 实际上是 noexcept 吗?

根据cppref,当前未指定重载noexcept。但我认为它们实际上是noexcept,对吧?由于不执行边界检查。所以没有像array::at这样的out_of_range异常.如果输入超出范围,就会发生低级段错误或访问冲突,这超出了C++异常范围(我猜)。 最佳答案 operator[]没有标记为noexcept的原因是它有一个“窄契约”,即要求索引值在范围内0...N-1。如果传递的值不在该范围内,则行为未定义,并且(谁知道?)函数可能会抛出异常。关于不将具有“狭义契约”的事物标记为noexcept,该标准非常一致。这被非正式地

c++ - 如何在 C 和 C++ 中分配和释放 *array* 内存?

我的问题具体是关于数组,不是对象。关于malloc()/free()与new/delete的一些问题,但它们都集中在它们使用方式的差异上。我了解它们的使用方式,但我不了解是什么根本差异导致了使用差异。我经常听到C程序员说malloc()和free()是代价高昂的操作,但我从未听C++程序员这样说新建和删除。我还注意到C++没有对应于C的realloc()的操作。如果我正在编写等同于C++的vector类,我希望在调整数组大小时避免复制整个数组,但使用new和delete你必须复制。在C中,我会简单地realloc()。值得注意的是,realloc()可能只是复制整个数组,但我的印象是它

c++ - 在 C++ 中重载 new、delete

我遇到这一行是stroustrup运算符函数必须是成员或至少采用一个用户定义类型的参数(重新定义new和delete运算符的函数不需要)。operatornew和operatordelete不是将用户定义的类型作为它们的参数之一吗?这是什么意思,我在这里遗漏了什么吗 最佳答案 Stroustrup的引述显然适用于运算符重载。C++语言仅支持用户定义类型的运算符重载。这意味着重载函数(operator)必须是用户定义类型的成员,或者是具有至少一个用户定义类型参数的独立函数。这正是相关引述的意思。但独立(非成员(member))oper

c++ - 使用字符串数组 : arrays of pointers - Are they like multidimensional arrays?

我最近一直在阅读C++fordummies,要么书名用词不当,要么他们不指望我。在关于使用带有字符串的指针数组的部分中,他们展示了一个函数,我完全被难住了,不知道该转向哪里。char*int2month(intnMonth){//checktoseeifvalueisinrangif((nMonth12))return"invalid";//nMonthisvalid-returnthenameofthemonthchar*pszMonths[]={"invalid","January","February","March","April","May","June","July","A