草庐IT

copy-constructor

全部标签

c++ - 仅对 C++ 中的空私有(private)构造函数使用声明是否正确?

例如,这是正确的吗:classC{private:C();C(const&Cother);}或者您应该提供定义:classC{private:C(){};C(const&Cother){};}?感谢当前的答案。让我们扩展这个问题——编译器是否会在其中一个示例中生成更好的代码?我可以想象为ctor提供主体会强制编译器在编译单元中包含一些(空)代码吗?自动生成的代码也是如此吗? 最佳答案 如果您不希望您的对象可复制,则无需提供实现。只需将复制ctor声明为私有(private)即可,无需任何实现。其他ctors也是如此,如果您不想让任何

c++ - copy-and-swap 技术在赋值运算符函数中使用复制构造函数

我正在阅读“EffectiveC++byScottMeyers”,其中第11项建议在我的赋值运算符中使用“copy-and-swap”技术:Widget&Widget::operator=(constWidget&rhs){Widgettemp(rhs);//Copyconstructorswap(temp);//Swapwith*thisreturn*this;}但是在Item12中是这样写的:Itmakesnosensetohavecopyassignmentoperatorcallthecopyconstructor.我认为第11项和第12项是矛盾的。我理解错了吗?

c++ - 当对象没有数据成员时,统一初始化复制失败

在更新一些代码以使用统一初始化时,我认为这将是现在“旧式”括号样式的现代替代品。我知道情况并非总是如此(明显的例子,vector)但我偶然发现了另一个我不明白的区别。classObject{public:Object()=default;Object(constObject&)=default;};intmain(){Objecto;Objectcopy{o};//errorObjectcopy2(o);//OK}在clang3.5下编译失败,报错:(在gcc下也失败)error:excesselementsinstructinitializerObject有两个不同的变化使这项工作。

C++复制构造函数的奇怪之处

我不明白为什么在下一段代码中,定义的复制构造函数不打印...#includeusingnamespacestd;classB{staticintcount;intdata;intid;voidprint(constchar*p){cout我希望使用Bx=b+2打印复制构造函数,但它没有显示。有任何想法吗?谢谢,输出:B(int),1,42operator+,1,42B(int),2,44operator+,1,42B(int),3,43~B(),3,43所以是返回值优化? 最佳答案 我很快将其放入GCC并注意到相同的行为。显然,编译

c++ - 继承层次结构 : Constructor & Destructor execution sequence

在这里http://www.parashift.com/c++-faq-lite/multiple-inheritance.html[25.14]节说Theveryfirstconstructorstobeexecutedarethevirtualbaseclassesanywhereinthehierarchy.我尝试使用以下程序验证它:A(purevirtual)|B|C(virtual)/\(virtual)ED\/F|G(purevirtual)|H每个类都有一个c'tor和virtuald'tor。输出如下:ABCEDFGH~H~G~F~D~E~C~B~APressanyke

c# - 无法在我的 WPF 应用程序中使用 Array.Copy()

我是一名C++开发人员,最近开始从事WPF方面的工作。好吧,我在我的应用程序中使用Array.Copy(),看起来我无法完全获得所需的结果。我在我的C++应用程序中做了如下操作:staticconstsignedcharversion[40]={'A','U','D','I','E','N','C','E',//name0,0,0,0,0,0,0,0,//reserved,firmwaresize0,0,0,0,0,0,0,0,//boardnumber0,0,0,0,0,0,0,0,//variant,version,serial0,0,0,0,0,0,0,0//datecode,r

c++ - Type t = Type() 是否调用复制构造函数?

我真的很困惑....Typet=Type()是否调用复制构造函数?我问是因为当我尝试时:#includeclassTest{public:Test(Testconst&){std::cout什么都没有输出,但是当我把它改成#includeclassTest{Test(Testconst&){std::cout我得到:errorC2248:'Test::Test':cannotaccessprivatememberdeclaredinclass'Test'这没有意义(特别是因为这是一个调试版本)。更新:即使这样也可以编译!structTest{Test(Test&&)=delete;Te

c++ - 如何获得指向类的复制构造函数的成员函数指针?

有什么方法可以让成员函数指针指向类的拷贝构造函数吗?我知道如何定义和使用普通成员函数指针,但我似乎无法找到获取它的方法。 最佳答案 根据C++标准,“不得获取构造函数的地址”,因此不可能按照您的要求进行操作。但是,有一个简单的解决方法。下面的代码返回一个函数指针,指向一个创建其输入拷贝的函数。templateautoGetCopyConstructor()->obj(*)(constobj&){return+[](constobj&o){returnobj(o);};}structfoo{std::stringmsg;foo(con

c++ - 为什么我们必须在复制构造函数的参数中使用引用而不是指针?

为什么我们必须在复制构造函数的参数中使用引用而不是指针?这个问题是在采访中被问到的。我回复了以下几点:引用不能为NULL。如果我们使用指针,那么它就不是拷贝构造函数。标准规定如此(第12.8.2节)。但是面试官并不满意。他说这“与继承和虚函数有关”。我需要帮助或一些相关要点,以便我能够在那个方向上想到答案。 最佳答案 你的观点看起来很合理,我不知道你的面试官想听你说什么。但是,据我所知,为复制构造函数和赋值运算符启用统一语法是Stroustrup引入引用的一个重要原因。例如,假设我们在C++中没有引用,我们想做一些复制构造,通过指针

c++ - 构造函数转换

类X->通过两种方式转换为Y1)构造函数,以及2)通过转换函数。我了解单参数构造函数用于转换。在规范中:Animplicitly-declaredcopyconstructorisnotanexplicitconstructor;itmaybecalledforimplicittypeconversion.问题:那么,这意味着不仅单参数构造函数用于转换,而且复制构造函数?。如果是这样,它使用什么场景?任何示例代码片段?如果问题很基础,请多多包涵。 最佳答案 复制构造函数不是显式构造函数,因此将尽可能使用它。复制构造函数只会从相同的类