草庐IT

expose_new

全部标签

c++ - 在 void 指针上使用 new

intmain(){void*Foo=new???deleteFoo;}你是怎么做类似上述的事情的?你不能放newvoid[size]。而且我不想知道如何使用malloc()和free()来做到这一点。我已经知道这行得通。我很好奇,想知道new和delete是怎么做的。我在谷歌上搜索了一下,看到了一些关于operatornew(size);和operatordelete(size);这些和new/delete有什么区别?为什么C++不仅仅允许newvoid*[size]? 最佳答案 这样就可以了:intmain(){void*Foo

c++ - new[] 如果元素默认构造函数可以抛出?

考虑以下代码:example_t*a=newexample_t[8];classexample_t具有可以抛出的默认ctor,假设构造数组中的第5个元素会抛出。是否会自动调用前4个元素的析构函数?这是一种定义明确的行为吗? 最佳答案 这是完美的定义和良好的行为。如果对象的初始化以异常终止,则所有完全构造的子对象都将被销毁,其构造顺序与它们的构造相反。这对于数组和用户定义类型的对象是一样的(想想类和类成员)。正式来说,我们有C++1115.2/2:Anobjectofanystoragedurationwhoseinitializat

c++ - 为什么无法访问 new[]'d 数组的大小?

当你使用new[]分配一个数组时,为什么你不能从指针中找出那个数组的大小呢?它必须在运行时知道,否则delete[]将不知道要释放多少内存。除非我错过了什么? 最佳答案 在典型的实现中,动态内存块的大小以某种方式存储在block本身中-这是真的。但是没有标准的方式来访问这些信息。(实现可以提供特定于实现的方式来访问它)。malloc/free就是这样,new[]/delete[]也是这样。事实上,在典型的实现中,new[]/delete[]调用的原始内存分配最终由一些实现特定的malloc/free类对处理,这意味着delete[]

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?谢谢! 最佳答案 对于一般编程,