copy-constructor 相关问题

复制构造函数是一个构造函数,它创建一个新对象,它是现有对象的克隆。该术语主要用于C ++编程语言,其中复制构造函数具有特殊状态。

派生类有必要创建复制构造函数吗?

如果我有一个带有复杂数据成员的基类,比如说 char*,并且在继承链的末尾我有另一个具有相同类型 DM 的类,我是否必须实现 CCTOR(复制

回答 3 投票 0

如何使用委托构造函数和条件初始化列表编写复制/移动构造函数

我即将完成我的容器,但我要解决的最后一个问题是如何处理复制/移动构造函数并在私有联合成员中正确构造正确的成员变量

回答 1 投票 0

C++ 中的复制构造函数和 = 运算符重载:可能是通用函数吗?

由于复制构造函数 MyClass(const MyClass&); 和 = 运算符重载 MyClass& 运算符 = (const MyClass&); 有几乎相同的代码,相同的参数,只有不同......

回答 3 投票 0

c++何时进行向量push_back深拷贝对象?

我创建了一个向量并使用push_back将几个节点对象放入其中。但是,我无法预测何时将使用移动构造函数或复制构造函数。 推的时候有什么模式吗...

回答 1 投票 0

按位复制构造函数真的与对象共享相同的内存位置吗?

嘿,我对 C++ 中对象按位复制期间的内存分配感到困惑。 以下是 Herbert Schildt 所著的《C++ 第四版》Pg:366 中的内容: 让我们首先重申一下问题......

回答 2 投票 0

尝试找出课程的复制构造函数

这是有问题的课程。 课程课程{ //** 您不能更改此 private: 区域中的声明。 课程名称名称; ///< Name of the course int

回答 1 投票 0

了解 C++ 中按值传递对象时的复制构造函数和临时对象创建

给出下一个代码: #包括 #包括 #包括 类人 { 民众: 人(const char *i_Name =“未知”,int i_Age = 0) : 我...

回答 1 投票 0

在c++中将静态数组复制到动态数组中

这段代码的主要目标是将部分字符串从myArray复制到neuArray,然后将复制的字符串从neuArray输出到控制台。 代码可以工作,但不是 100%,因为我得到了

回答 1 投票 0

为什么编译器总是选择非显式构造函数来进行复制列表初始化?

对于下面的代码,编译器是否有任何原因会选择非显式构造函数.. 结构体S{ S() = 默认值; 显式 S(S & cp) { std::cout << "explicit" <<...

回答 1 投票 0

链式调用中,是否调用了复制赋值?

我想了解何时调用复制构造函数或赋值。假设如下: 类 Foo { 民众: 富() { 计算<< "foo constructor " << this &l...

回答 0 投票 0

复制语义和向量

我正在处理分配内存供内部使用的对象。目前,它们不可复制。 例如。 我的班级 { 民众: MyClass() { 存储 = new int; } ~MyClass() { 删除 Store; }

回答 3 投票 0

错误:没有匹配函数调用复制构造函数,c++

提前抱歉可能是一个不好的帖子。我已经在 stackoverflow 上搜索了回答我问题的现有帖子,但是尽管这里的许多帖子都是相似的,但它们似乎都不适用于我的

回答 1 投票 0

类构造函数在 clang 上编译但在 gcc 上被拒绝

我正在学习 C++ 中的构造函数。特别是,一个 C++ 类可以有多个构造函数。但是后来我制作了以下程序,它适用于 clang 但不适用于 gcc 和 msvc。

回答 2 投票 0

如何完美转发一个 const ref 或 movable rvalue 的通用引用?

我已经用 C++20 编写了一个无锁的线程安全环形队列,到目前为止它可以正常工作。 唯一不完美的是它必须有两个 enque() 方法,一个接受对左值的 const 引用作为

回答 0 投票 0

为什么复制赋值push_back元素到现有对象?

我创建了一个名为 Sentence 的类: 班级 句子 { 民众: 向量 Clause_arr; 句子() {}; 句子(常量句子& s){ 对于(int i = 0; i < s.Clause_arr.s...

回答 1 投票 0

指向对象链表的 C++ 数组,我在函数中创建对象

编辑:完整程序https://onecompiler.com/cpp/3z5p2rpgk 我有一个指向 MailServer 类中 CMail 对象链接列表的指针数组。 (CMail **m_Sent;) 在 sendMail() 函数中,我将

回答 0 投票 0

原子变量的向量(数组)

我知道 atomic 有一个被删除的复制构造函数,但是我该怎么做才能使这段代码工作?我怎么可能在原子向量中定义一个复制构造函数? #包括 我知道 atomic 有一个被删除的复制构造函数,但是我该怎么做才能使这段代码工作?我怎么可能在向量中为原子定义一个复制构造函数? #include <atomic> #include <vector> int main() { std::vector<std::atomic<int>> examp; examp.resize(64); } 你不能有 std::atomic<int> 的向量,因为它不可复制或移动,但你可以有一个 unique_ptr 到 atomic<int> 的向量。如果你真的需要一个运行时可变大小的原子向量,这可能是一个可行的选择。这是一个例子: #include <iostream> #include <atomic> #include <vector> #include <memory> using namespace std; int main() { std::vector<std::unique_ptr<std::atomic<int>>> examp; examp.resize(64); // 64 default unique_ptrs; they point to nothing // init the vector with unique_ptrs that actually point to atomics for (auto& p : examp) { p = std::make_unique<std::atomic<int>>(0); // init atomic ints to 0 } // use it *examp[3] = 5; for (auto& p : examp) { cout << *p << ' '; } cout << '\n'; } std::atomic 不可复制或移动。正如您所指出的,复制构造函数被删除但没有生成移动构造函数。见http://en.cppreference.com/w/cpp/language/move_constructor: 如果没有为类类型提供用户定义的移动构造函数 (结构、类或联合),并且以下所有为真: 没有用户声明的拷贝构造函数; 用户声明的意思是“编译器没有添加”(即由default)。尽管它是一个库类,但构造函数是用户声明的。 矢量的 resize 函数要求类型是可移动插入或可复制插入的,具体取决于重载。见http://en.cppreference.com/w/cpp/container/vector/resize: 如果当前大小小于计数, 1)附加默认插入的元素 2)附加值的额外副本 你所做的根本行不通。 我在 VS 2022 中尝试了以下代码并且它有效: #include <atomic> #include <vector> int main() { std::vector<std::atomic<int>> examp (64); } 但是,由于std::atomic类型不可复制不可移动,所以一些成员函数(如resize())无法实现。对于原子变量的向量,许多成员函数提出了更严格的要求。 见https://en.cppreference.com/w/cpp/container/vector 如果你只需要一个运行时变量的大小,但之后不需要调整对象的大小,你可以使用 std::vector< atomic<int> > elems(size) 正如@Quanbing Luo 指出的那样。 像.pop_back和.push_back这样的成员函数不会编译,即使你已经安排好了它绝对不会超过它的.capacity()并且必须增长。但除此之外它应该工作正常。 在 C++20 中,您可以使用 std::atomic_ref 对普通 int 对象进行原子操作,因此您可以使用 std::vector<int> 和 static_assert(std::atomic_ref<int>::required_alignment == alignof(int), "vector elements need to be sufficiently aligned for atomic_ref"); std::vector<int> examp(size); // and potentially do whatever non-atomic init before sharing examp.resize(size2); std::atomic_ref<int> examp3(examp[3]); examp3.store(1, std::memory_order_release); 也许到处都使用typedef或其他东西而不是裸露的int。甚至可能是一些原子操作的辅助函数,因此您不必在单独的语句中手动构造 atomic_ref 对象。 (构造一个是免费的;只要您不保留 atomic_ref 对象,它就会优化。它仅作为 API 存在,用于包装像 GNU C __atomic_load_n(int *, int memorder) 这样的东西,您可以手动使用它,如果你不想使用 C++20 特性。) 当其他线程正在访问它的元素时,没有什么可以使它线程安全地增长或缩小向量,所以在另一个答案中提出的额外间接级别没有任何好处std::vector<std::unique_ptr<std::atomic<int>>> examp;。std::vector<unique_ptr>对象本身(通常 3 个指针,.data()、.end() 和分配结束)不是原子的,任何在另一个线程访问它时重新分配数组的东西都是一个问题。 编写低效代码只是为了让编译器满意,这与使用无锁原子而不是锁定(以牺牲简单性为代价的性能)的目的有点不一致。

回答 4 投票 0

拷贝构造函数不被继承

我有以下代码: C类{ 民众: C(整数){} C(常量 C&) {} C() {} }; D类:公共C { 民众: 使用 C::C; }; 诠释主要(){ CC; D d_from_c(c); //...

回答 3 投票 0

C++链表如何使用复制赋值运算符

我必须使用复制构造函数和复制赋值运算符来测试链表。 list1 附加了 3 个双打 list2 = list1 复制构造函数进来的地方。 List4 = list3 = list1 是...

回答 1 投票 0

如何使复制构造函数也复制虚拟表?

这是简单的代码片段。我想要 I-A-B 类继承,这样我的复制构造函数也可以初始化从 I 继承的派生类的就地虚拟表。 为简单起见...

回答 2 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.