问题标签 [copy-assignment]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - 在 C++ 中,具有 const 数据成员的类可以没有复制赋值运算符吗?
我正在设计一个应该有一个名为 const 数据成员的类K
。我还希望这个类有一个复制赋值运算符,但编译器似乎隐式地从任何具有 const 数据成员的类中删除了复制赋值运算符。这段代码说明了基本问题:
这是它产生的错误:
我想我理解编译器为什么这样做;我要复制到的类的实例必须先存在,然后才能复制到,K
如果它是 const,我不能在该目标实例中分配,就像我在上面尝试做的那样。
我对这个问题的理解正确吗?如果是这样,有没有办法解决这个问题?也就是说,我可以为我的类定义一个复制构造函数并且仍然提供K
类似 const 的保护吗?
c++ - 初始化对象和赋值给对象的区别
我正在做一些基本的对象练习,我遇到了这个问题。
此类名为 Matrix,我尝试将其初始化a7
为a2.mutiply(a5)
.
但是当我一开始尝试初始化并稍后a7
分配它时,结果却大不相同。a2.mutiply(a5)
我以为这两个代码是一样的,但结果告诉我我错了。
有人可以帮我指出问题吗?
矩阵.h
源.cpp
结果.txt
c++ - C++ 单独赋值还是创建一个新对象?
如果我有一个glm::vec3
例子,我想给它分配一个新值,以下哪种方法更快?
或者
如果我理解正确,第一种方法执行以下操作:
- 调用
glm::vec3
构造函数在堆栈上创建一个新的临时向量 - 调用复制赋值操作符
glm::vec3
来复制新向量
而第二种方法只是分配并避免创建一个虚拟的临时向量,那么为什么我想做大量的 *** 而不是仅仅分配我的值呢?
c++ - 重载赋值运算符不起作用
我有一个班级Employee。(当我添加成员任务和任务列表时,我的一些评论没有更新;对此我深表歉意。)
员工.h
员工.cpp
我们被指示实现复制构造函数和赋值重载,并且还特别指示我们在主程序中动态分配单个 Employee 对象。
我似乎遇到的问题是使用赋值重载进行交换。
员工驱动程序.cpp
有问题的问题似乎发生在这里:(
*emp1 = *emp2;
朝向主程序的底部),但我不知道为什么;任何帮助,将不胜感激。我可以绕过它,但我认为这不是练习的目的,我想知道为什么这个语句不能正常工作。
谢谢。
c++ - 在派生类中使用复制赋值
cppreference说:
因为总是为任何类声明复制赋值运算符,所以基类赋值运算符总是隐藏的。如果使用 using-declaration 从基类引入赋值运算符,并且其参数类型可以与派生类的隐式赋值运算符的参数类型相同,则 using-declaration 也被隐式隐藏宣言。
据我了解,以下代码不应编译。因为
- B::operator=(const B&) 是隐式声明的。
- A::operator=(const A&) 和 using-declaration 都是隐藏的。
但是,它编译成功并打印“A::operator=”,为什么?
c++ - 将新对象分配给其地址时,是否必须销毁对象?
考虑以下代码。
输出是我没想到的。
我知道那Thing 2
是一个临时对象,这就是为什么它被摧毁了两次。我有几个关于发生了什么的问题Thing 0
。
- 为什么没有
Thing 0
被销毁? - 会不会有内存泄漏?
- 我必须以
Thing 0
某种方式破坏还是成功覆盖?
c++ - 复制和分配:如何深度复制?C++
我有两个类,它们本质上是看起来像这样的字符串类。第一个类包含一个字符串作为成员,第二个类还包含一个字符串以及一个用于“MenuItem”类的指针数组以及一个跟踪器。
我希望能够将一个 Menu 对象深度复制到另一个 Menu 对象,但我这样做的方式似乎确实是在复制“m_MenuItems”时它是一个浅拷贝。我确定“m_Title”成员正在被深度复制,因为我正在为它创建一个“新”字符*,但是当我尝试将源“m_MenuItems”复制到目标时出现问题,因为它们最终共享相同的记忆。这会导致问题,因为当调用解构函数时,它会在同一个对象上调用两次,导致我的程序崩溃。
这是我的副本和分配代码:
下面这个for循环是我的问题出现的地方......
我应该如何为目标“m_MenuItems”分配一个新的内存块?
c++ - 为什么 & 限定符与赋值运算符一起使用?
我的问题是参考以下链接:
我无法关注这些帖子。有人可以解释一下:
&
给定代码段末尾的实际作用是什么?auto operator=(const string& rhs) &;
.- 为什么
&
这个给定代码片段的末尾是多余的?(还请确认它是多余的还是有问题的)auto operator=(const string& rhs) & = delete;
- 这个陈述是否有效,
auto operator=(const string&& rhs) &&;
?
如果限定符&
阻止右值的复制分配,它是否已经被指定的输入参数的类型注意?( const string& rhs
)。
在以下示例中,无论有无限定符,右值赋值都得到相同的结果。
c++ - 关于复制赋值和删除操作符的问题
我遇到了这个链接,我看到了这个程序:
现在我看到这个程序很好,除了这部分:
我不明白为什么我们必须在delete m_ptr
这里做。此外,如果m_ptr
还没有动态分配会发生什么?然后我们将删除一个无效的指针。我们不能像这样不删除指针就保持原样吗?
c++ - 无法生成 C4512 赋值运算符
我正在更新一个旧的 C++ 应用程序,它是用 MSVC 2013 编译的,而不是我知道的最新版本。
我收到警告:
这是类原型:
我以前没有看到过这个警告,我不确定它的实际含义是什么?