在C++中在预定位置构造对象有什么用?以下代码说明了在预定位置的构造-void*address=(void*)0xBAADCAFE;MyClass*ptr=new(address)MyClass(/*argumentstoconstructor*/);这最终会在预定的“地址”处创建MyClass的对象。(假设address指向的存储足够大以容纳MyClass对象)。我想知道在内存中的这些预定位置创建对象的用途。 最佳答案 placementnew有用的一个场景是:您可以一次预分配大缓冲区,然后使用许多放置新运算符。这会给你更好的性能
我试图对模板参数进行静态断言,以检查/强制Type可复制构造。但是静态断言失败。我不明白为什么,也找不到任何文档为什么它会在静态评估中失败。实例化的类是可复制构造的,但是它使用了我认为被称为奇怪的重复模板参数模式的东西。完整的测试代码如下:#include#includeusingnamespacestd;templateclassFunContainer{//static_assert(is_copy_constructible::value,"Typemustbecopyconstructible!");//::value//::value;};};classFun:publicF
在N3337中,我正在阅读§23.3.2.1/3,它指出:Anarraysatisfiesalloftherequirementsofacontainerandofareversiblecontainer(23.2),exceptthatadefaultconstructedarrayobjectisnotemptyandthatswapdoesnothaveconstantcomplexity.在§23.2.1,表96容器要求中,它显示了一个默认构造的对象Xu;,其中后置条件是u.empty()。据推测,以下内容:std::arraya;应该导致a.empty()输出1,它确实如此。
我知道在Base类的构造函数中-当调用虚拟方法时-调用Base方法,而不是派生-参见Callingvirtualfunctionsinsideconstructors.我的问题与这个主题有关。我只是想知道如果我在Derived类构造函数中调用虚拟方法会发生什么-但在构造Base部分之前。我的意思是调用虚方法来评估基类构造函数参数,请参见代码:classBase{public:Base(constchar*name):name(name){cout编译器g++(4.3.x-4.5x版本)输出为:Derived::getName()Base():DerivedDerived():Deriv
我经常向我的C++对象添加一个Empty方法,以使用类似于以下的代码清除内部状态。classFoo{private:intn_;std::stringstr_;public:Foo():n_(1234),str_("Hello,world!"){}voidEmpty(){*this=Foo();}};这似乎比在构造函数中复制代码要好,但我想知道*this=Foo()是否是清除对象时的常用方法?这个等着咬我的屁股有什么问题吗?有没有其他更好的方法来实现这种事情? 最佳答案 我会让构造函数调用我的函数:classFoo{private:
我刚刚在使用SFINAE检测模板类型是否默认可构造时观察到libc++的一个奇怪问题。以下是我能够想出的一个最小示例:#include#includetemplatestructDummy;templatestructDummy{};templatestructhas_dummy:std::false_type{};templatestructhas_dummy>::value>>:std::true_type{};intmain(){std::cout{}(){}()它编译并输出预期的行true和false使用libstdc++使用g++或clang++编译时.但是,当我尝试使用li
我有一个容器,其中包含一堆指向基类的指针,以及一个函数,该函数接受一些输入并返回一个类,该类是基类的子类。它返回哪个子类取决于输入。现在,我有一个像这样的巨大switch语句:classBase{...}classA:publicBase{...}classB:publicBase{...}...classZ:publicBase{...}Base*depends(intinput){switch(input){case1:returnnewA(...);case2:returnnewB(...);...case26:returnnewZ(...);default:...}}我想知道是
我有这门课classXXX{public:XXX(structyyy);XXX(std::string);private:structxxxdata;};第一个构造函数(使用结构)很容易实现。第二,我可以将一个字符串分成特定格式,进行解析,然后提取相同的结构。我的问题是,在java中我可以这样做:XXX::XXX(std::stringstr){structyyydata;//dostuffwithstringandextractdatathis(data);}使用this(params)调用另一个构造函数。在这种情况下,我可以做类似的事情吗?谢谢 最佳答案
这个问题在这里已经有了答案:C++98/03std::is_constructibleimplementation(4个答案)关闭5年前。到目前为止,我在网上找不到任何ELI5。对于一个学习项目,我想实现我自己的is_constructible。有人可以解释一下它是如何工作的吗?
我正在用C++制作一个简单的线程服务器应用程序,事实上,我使用libconfig++来解析我的配置文件。好吧,libconfig不支持多线程,因此我使用两个包装类来完成“支持”。重点是,其中一个失败了:classapp_config{friendclassapp_config_lock;public:app_config(char*file):cfg(newlibconfig::Config()),mutex(newboost::mutex()){cfg->readFile(file);}private:boost::shared_ptrcfg;boost::shared_ptrmut