草庐IT

copy-constructor

全部标签

c++ - 使用 std::copy 插入 STL 队列

我想使用std::copy将元素插入到这样的队列中:vectorv;v.push_back(1);v.push_back(2);queueq;copy(v.begin(),v.end(),insert_iterator>(q,q.front()));但是这个编译失败,提示begin不是std::queue的成员。注意:我也用std::inserter进行了尝试-这也失败了,这一次说'reference'不是'std::queue'的成员。std::back_inserter和std::back_insert_iterator也会失败并出现同样的错误。我是否遗漏了一些明显的东西,或者in

c++ - 减少 operator= 和复制构造函数之间的代码重复

我有一个需要非默认复制构造函数和赋值运算符的类(它包含指针列表)。有没有什么通用的方法可以减少复制构造函数和赋值运算符之间的代码重复? 最佳答案 没有“通用方法”来编写适用于所有情况的自定义复制构造函数和赋值运算符。但是有一个成语叫做“copy-&-swap”:classmyclass{...public:myclass(myclassconst&);voidswap(myclass&with);myclass&operator=(myclasscopy){this->swap(copy);return*this;}...};它在许

c++ - 减少 operator= 和复制构造函数之间的代码重复

我有一个需要非默认复制构造函数和赋值运算符的类(它包含指针列表)。有没有什么通用的方法可以减少复制构造函数和赋值运算符之间的代码重复? 最佳答案 没有“通用方法”来编写适用于所有情况的自定义复制构造函数和赋值运算符。但是有一个成语叫做“copy-&-swap”:classmyclass{...public:myclass(myclassconst&);voidswap(myclass&with);myclass&operator=(myclasscopy){this->swap(copy);return*this;}...};它在许

C++ 静态初始化 vs __attribute__((constructor))

例子:structFoo{Foo(){printf("foo\n");}};staticFoofoo;__attribute__((constructor))staticvoid_bar(){printf("bar\n");}是否先打印foo或bar是否具有确定性?(我希望并且期望静态对象的构造函数总是首先执行,但不确定,关于构造函数属性的GCC文档没有说明任何内容。) 最佳答案 foo将首先打印,因为对象按其声明的顺序进行初始化。运行看看:Ideoneonlinedemo顺便说一句,__attribute__((construct

C++ 静态初始化 vs __attribute__((constructor))

例子:structFoo{Foo(){printf("foo\n");}};staticFoofoo;__attribute__((constructor))staticvoid_bar(){printf("bar\n");}是否先打印foo或bar是否具有确定性?(我希望并且期望静态对象的构造函数总是首先执行,但不确定,关于构造函数属性的GCC文档没有说明任何内容。) 最佳答案 foo将首先打印,因为对象按其声明的顺序进行初始化。运行看看:Ideoneonlinedemo顺便说一句,__attribute__((construct

c++ - 为什么这段代码试图调用复制构造函数?

我只是在VisualStudio中花费了大量时间来处理编译错误。我已将代码提炼成下面的可编译的小示例,并在IdeOne上进行了尝试,得到了相同的错误,您可以看到here.我想知道为什么下面的代码尝试调用B(constB&)而不是B(B&&):#includeusingnamespacestd;classA{public:A():data(53){}A(A&&dying):data(dying.data){dying.data=0;}intdata;private://notimplemented,thisisanoncopyableclassA(constA&);A&operator=

c++ - 为什么这段代码试图调用复制构造函数?

我只是在VisualStudio中花费了大量时间来处理编译错误。我已将代码提炼成下面的可编译的小示例,并在IdeOne上进行了尝试,得到了相同的错误,您可以看到here.我想知道为什么下面的代码尝试调用B(constB&)而不是B(B&&):#includeusingnamespacestd;classA{public:A():data(53){}A(A&&dying):data(dying.data){dying.data=0;}intdata;private://notimplemented,thisisanoncopyableclassA(constA&);A&operator=

c++ - 为什么 std::remove_copy_if() 不实际删除?

这可能是STL中命名最差的函数吗?(反问)std::remove_copy_if()实际上似乎没有进行任何删除。据我所知,它的行为更像是copy_if_not。否定有点令人困惑,但可以使用std::not1()解决,但是我可能会误解一些东西,因为我无法理解这个函数与删除有什么关系-我错过了什么吗?如果没有,是否有STL算法用于有条件地从容器中移除(移动?)元素并将它们放入另一个容器中?编辑以添加示例,以免读者感到困惑。以下程序似乎未触及输入范围(V1):#include#include#include#includeusingstd::cout;usingstd::endl;intma

c++ - 为什么 std::remove_copy_if() 不实际删除?

这可能是STL中命名最差的函数吗?(反问)std::remove_copy_if()实际上似乎没有进行任何删除。据我所知,它的行为更像是copy_if_not。否定有点令人困惑,但可以使用std::not1()解决,但是我可能会误解一些东西,因为我无法理解这个函数与删除有什么关系-我错过了什么吗?如果没有,是否有STL算法用于有条件地从容器中移除(移动?)元素并将它们放入另一个容器中?编辑以添加示例,以免读者感到困惑。以下程序似乎未触及输入范围(V1):#include#include#include#includeusingstd::cout;usingstd::endl;intma

c++ - 在 C++ 中编写复制构造函数和赋值运算符的 list

请列出复制构造函数和赋值运算符在C++中需要执行的任务,以保持异常安全、避免内存泄漏等。 最佳答案 首先确定您确实需要支持拷贝。大多数情况下并非如此,因此禁用两者是可行的方法。有时,您仍需要从多态层次结构中提供对类的复制,在这种情况下:禁用赋值运算符,编写(protected?)复制构造函数,并提供虚拟clone()函数。否则,如果您正在编写一个值类,您将回到Coplien的正交规范形式的领域。如果您有一个无法简单复制的成员,则需要提供一个复制构造函数、一个析构函数、一个赋值运算符和一个默认构造函数。此规则可以细化,例如:TheLa