草庐IT

copy-constructor

全部标签

C++ vector 复制赋值,调用其元素的哪种复制机制?

我的类A显式实现了它的复制构造函数和复制赋值。复制分配此类元素的vector时使用哪种复制机制?这是:vectora1,a2(5);a1=a2;要对a1的所有新元素使用A的复制构造函数,并将a2的元素作为输入?还是要在a1中为元素腾出空间,然后将A的operator=与的元素一起使用>a2作为输入?如果a1在赋值前不为空怎么办?它甚至被指定了吗?我的类的复制构造函数和operator=不完全做同样的事情(这是不好的做法吗?目前主要是测试内容)。看起来复制构造函数被调用了,但我想知道它是否保证是那样的,或者在这种情况下是否恰好是这样。 最佳答案

c++ - 为什么具有非常量复制构造函数的类不被视为可复制构造?

给定structFoo{Foo(Foo&){}};std::is_copy_constructible::value是falseFoo具有有效的复制构造函数:来自draftn4659:15.8.1Copy/moveconstructors[class.copy.ctor]1Anon-templateconstructorforclassXisacopyconstructorifitsfirstparameterisoftypeX&,constX&,volatileX&orconstvolatileX&,andeithertherearenootherparametersorelseal

c++ - 什么时候允许编译器优化复制构造函数

这个问题在这里已经有了答案:Whatarecopyelisionandreturnvalueoptimization?(5个答案)关闭4年前。今天我遇到了一些关于复制构造函数我不太了解的事情。考虑下一段代码:#includeusingnamespacestd;classsome_class{public:some_class(){}some_class(constsome_class&){cout然后在给copy赋值origin的时候调用了copy构造函数,这就说得通了。但是,如果我将拷贝声明更改为staticsome_classcopy=some_class();它没有被调用。即使在

C++ 11 : Mutex & Condition Variable Cannot be Copied

我是C++11的新手,正在使用线程。我遇到了一个无法复制互斥锁和条件变量对象的场景。代码是这样的....classproducer{public:producer(mutexm,condition_variablecv){mut=m;//ERRORcvar=cv;//ERROR}private:mutexmut;condition_variablecvar;}尝试在构造函数中复制变量时出现错误。似乎复制构造函数设置为deleteformutex和cv。有办法克服吗?我想要一个生产者和消费者类,然后从ma​​in函数传递互斥量和cv。所以基本上来自main函数的调用应该是这样的.....

c++ - 二叉树的深度复制构造函数

我正在尝试用C++创建我的二叉树数据结构的深层拷贝。问题是我正在使用的代码似乎只给我一个浅拷贝(这似乎会导致我的解构函数出现问题)。下面的代码是我的二叉树复制构造函数:BinaryTreeStorage::BinaryTreeStorage(constBinaryTreeStorage©tree):root(NULL){root=copytree.root;copyTree(root);}BinaryTreeStorage::node*BinaryTreeStorage::copyTree(node*other){//ifnodeisempty(atbottomofbinary

c++ - 子类坚持调用模板而不是构造函数

以下不使用g++4.4.7编译,在命令行上传递--std==c++0x:#include#includetemplateclassA{public:Tv;A(){std::coutexplicitA(constV&i):v(i){}#endif};classB:publicA{public:B(){std::cout(i){std::cout(std::move(i)){std::cout(static_cast&>(i)){std::cout(std::move(static_cast&&>(i))){std::cout产生以下错误,复制和移动构造函数似乎调用显式A模板而不是A的明显

c++ - 如何将具有 "deleted"复制构造函数和赋值运算符的类放入映射中?

因为我使用的是一个不完全是C++11的编译器(VS11),所以我收到一个关于防止使用复制构造函数和赋值运算符的链接器错误。一切都很好,但问题是我不能将我的类放在std::map中,其中键是uin32_t,值是我的类。我什至尝试了emplace,但它不起作用。我正在考虑std::move将unique_ptr放入map中,但不想重新设计容器。那么有没有什么优雅的方法可以做到这一点(优雅==不像在map中放置一个虚拟对象然后在值内存中放置新的:)?代码位是这样的:std::mapm_map;//declarednotdefinedpublic:LogFileWriter(constLogF

c++ - 为类存储指向另一个类的指针复制构造函数析构函数和赋值运算符

我是新来的,这是我的第一个问题。我对我的家庭作业有疑问。我被要求设计一个抽象类“Base”,它由类“Sub”继承(在作业中有sub1、sub2等,但我试图尽可能地缩小它的范围)。然后,我应该设计一个类“BasePtr”,它存储一个指向“Base”对象的指针。最后,baseptr:s将存储在std::vector中,并使用ostream_iterator和复制写入文件。然后应使用ifstream_iterator读取该文件,并将其存储在std::list中。我已经解决了上述问题,但在实现析构函数、复制构造函数和赋值运算符时遇到了一些问题(因为我在我的BasePtr类中动态分配内存,我相信

c++ - 默认情况下总是创建复制构造函数吗?

据我所知,直到今天,在创建新类时会创建四个默认的东西。“默认构造函数”、“析构函数”、“复制构造函数”和“赋值运算符”。但是今天当我浏览一篇C++文章时,它说可能存在默认情况下不创建复制构造函数的情况。这是真的吗?如果是,在什么情况下?在那些情况下,该类的实例如何按值传递? 最佳答案 1)是的,可能存在默认情况下不创建复制构造函数的情况。2)删除隐式声明的默认构造函数的条件在12.8复制和移动类对象[class.copy]中列出:12.8.7是关于其他特殊成员函数的声明如何影响隐式声明的拷贝构造函数。每当类声明复制构造函数、移动构造

c++ - msvc is_copy_assignable 始终为真?

#includeclassTest{public:Test(constTest&)=delete;Test&operator=(constTest&)=delete;};voidfn(Test&a,constTest&b){a=b;}static_assert(!std::is_copy_assignable::value,"Testshouldn'tbeassignable");在MSVC2013Update3下编译此代码时static_assert意外失败,并且函数fn编译失败(如预期)。这很矛盾,对吧?我是否滥用了is_copy_assignable?有没有其他方法可以测试这种情