草庐IT

new_odds

全部标签

c++ - 使用 new(this) 重用构造函数

这件事最近出现在我担任助教的一个类上。我们正在教学生如何在C++中进行复制构造函数,而最初教Java的学生问你是否可以从另一个构造函数中调用一个构造函数。我知道答案是否定的,因为他们在类里面的代码中使用了迂腐标志,而旧标准不支持这一点。我在Stackoverflow和其他网站上发现了使用new(this)来伪造这个的建议,如下所示classMyClass{private:int*storedValue;public:MyClass(intinitialValue=0){storedValue=newint(initialValue);}~MyClass(){deletestoredVa

c++ - 在 typedef 和 new 中使用 typename 关键字

考虑这段代码,templatestructSample{typenameT::X*x;//declarepointertoT'sX};在上面的代码中,编译器需要关键字typename,以便消除模板中嵌套类型和嵌套值的歧义。这意味着,在没有typename关键字的情况下,编译器会将其解释为T::X与x的乘积,T::X*x;//multiplyT::Xwithx所以在这种可能出现歧义的情况下,关键字typename变成necessity,以消除歧义。但是,上下文本身消除歧义的情况很少。othertopic讨论了基类和函数参数的上下文(尽管后者并没有消除歧义)。在这个话题中,我特别想讨论另外

c++ - 是否允许显式调用析构函数,然后在具有固定生命周期的变量上放置 new?

我知道显式调用析构函数会因为双重析构函数调用而导致未定义的行为,如下所示:#includeintmain(){std::vectorfoo(10);foo.~vector();return0;//Oops,destructorwillbecalledagainonreturn,double-free.}但是,如果我们调用placementnew来“复活”对象呢?#includeintmain(){std::vectorfoo(10);foo.~vector();new(&foo)std::vector(5);return0;}更正式地说:如果我在某个对象上显式调用析构函数,而该对象最初

c++ - 在使用 new (c++) 的构造函数调用中不使用括号

这个问题在这里已经有了答案:关闭11年前.PossibleDuplicate:Dotheparenthesesafterthetypenamemakeadifferencewithnew?所以我主要是:Class*pC=newClass;它的工作原理是Class*pC=newClass();我今天才意识到我省略了括号(所以我在某种程度上被最令人烦恼的解析的“相反”击中)。我的问题:这两种形式是否等效? 最佳答案 如果类定义了默认构造函数,那么两者是等价的;该对象将通过调用该构造函数来创建。如果类只有一个隐式的默认构造函数,那就有区别

c++ - 未定义对 operator new 的引用

我正在尝试使用cpputest构建一个简单的单元测试可执行文件。我已经将cpputest框架构建到一个静态库中,现在正试图将它链接到一个可执行文件中。但是,由于相关代码,我被绑定(bind)到一个相当复杂的Makefile设置中。这是我的命令行:/usr/bin/qcc-V4.2.4,gcc_ntoarmle_acpp-ne-lang-c++-O2-g-g-oApplication/UnitTests/Tests/symbols/UnitTestExe-Wl,--start-groupApplication/UnitTests/Tests/../.objs/main.oApplicat

c++ - c++中new int和new(int)有什么区别?

有什么区别int*num=new(int);和int*num=newint;?有区别吗?编辑谢谢大家。...最正确的答案是哪一个? 最佳答案 您的示例的上下文没有区别(使用int类型)。但是,如果您需要创建复合类型的对象,则存在差异,您需要使用括号版本。即:int(**fn_ptr_ok)()=new(int(*[10])());//OKint(**fn_ptr_err)()=newint(*[10])();//error 关于c++-c++中newint和new(int)有什么区别?,

C++ STL 分配器与运算符 new

根据C++Primer4thedition,page755,有一条注释说:ModernC++programsordinarilyoughttousetheallocatorclasstoallocatememory.Itissaferandmoreflexible.我不太明白这个说法。到目前为止,我阅读的所有Material都使用new在C++中分配内存。书中展示了vector类如何利用分配器的示例。但是,我想不出其他场景。谁能帮助澄清这个声明?并给我更多的例子?我应该何时使用分配器以及何时使用new?谢谢! 最佳答案 对于一般编程,

c++ - 如何正确释放placement new分配的内存?

我一直在阅读,当您使用placementnew时,您必须手动调用析构函数。考虑以下代码://Allocatememoryourselfchar*pMemory=newchar[sizeof(MyClass)];//ConstructtheobjectourselfMyClass*pMyClass=new(pMemory)MyClass();//Thedestructionofobjectisourduty.pMyClass->~MyClass();据我所知,运算符delete通常会调用析构函数,然后释放内存,对吗?那么我们为什么不使用delete来代替呢?deletepMyClass;

Vue 之 new Blob() 文件流下载文件不同文件类型的 type 值整理

在Vue项目中,经常用Blob二进制进行文件下载功能(vue后台返回文件流下载导出函数封装、调用示例),涉及不同后缀名的文件,这里整理一份Blob的配置关系对应表,在我们使用Blob做下载功能时,根据需要下载的文件类型修改type值进行下载即可。后缀名文件类型类型(type).xlsMicrosoftExcelapplication/vnd.ms-excel.xlsxMicrosoftExcel(OpenXML)application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.csvCSVtext/csv.docMicrosof

node.js - TS - 只能使用 'new' 关键字调用 void 函数

我从TypeScript收到这个奇怪的错误:"Onlyavoidfunctioncanbecalledwiththe'new'keyword."什么?构造函数,长这样:functionSuman(obj:ISumanInputs):void{constprojectRoot=_suman.projectRoot;//viaoptionsthis.fileName=obj.fileName;this.slicedFileName=obj.fileName.slice(projectRoot.length);this.networkLog=obj.networkLog;this.outpu