是否有好的方法来确定一个对象是否是另一个对象的克隆
Is there any good way to determine if an object is a clone of another?
想到了使用相等操作符,但是您需要定义它,这意味着每次向该类添加新的数据成员时都要更新它。所有被检查的类都需要这样做。还有其他好方法吗?
对于任何复杂到足以管理其自身资源的东西,都需要相等操作符是有原因的。没有好的自动比较方法。按位比较适用于POD类型,但除此之外别无它用。任何指针成员都可能指向不同的地址,即使该对象在逻辑上看起来是克隆的1。此外,标准对类的内存布局并不是很具体,所以即使没有指针和虚函数,它也可能失败(或者至少可能是UB)。
<一口> 1。我认为比较是复杂对象的基本逻辑操作。POD类型恰好是按位可比较的因为如果它们按位相等,它们就是相等的一口>
有许多操作需要一个领带。
在c++ 14中很容易得到一个
struct foo {
template<class Self> // may have template and friend reversed
friend auto make_tie(Self&&self){
return std::tie(self.a,self.b,self.c);
}
// ...
与make_tie
, <
, ==
, hash
, swap
, print
(可能还有其他,如serialize
,除了序列化需要版本控制)都可以一次编写,并适用于许多类型。
您必须维护make_tie
才能正常工作。c++ 1z轨道的反射工作组正在对该语言进行添加,这可能会使make_tie
需要更少的维护。
但是至少你从一个额外的成员变量列表中得到了很多操作(一些有用的)。
如果你的指针是智能的——如果你的指针是值语义的,==
应该比较值,如果是共享的,==
应该比较身份,如果是唯一的,==
应该两者都做。非默认克隆操作将需要非默认==
:将非默认副本推入资源管理类,并将==
逻辑放在那里。
总有C的memcmp
函数:
memcmp(&obj1, &obj2, sizeof(obj1));
其中obj1
和obj2
为同一类型
相关文章:
- 如何检查一个模板是否是另一个模板的类成员
- 如何检查字符串中的最后一个字符是否是某个字符并将其从字符串中删除?(C++)
- 如何以更有效的方式检查一个数字是否是素数?
- 在另一个对象 B 中创建对象 A 时,对象 A 是否是对象 B 的本地对象,对象 A 是否会存在于对象 B 的实例化之外?
- Python C API:如何检查对象是否是类型的实例
- 我试图编写一个代码来查找一个单词是否是回文,但它不起作用。怎么了?
- 找出std :: type_info对象是否是C 中另一个std :: type_info对象的子类型
- 当一个对象不是派生类时,滥用interpret_cast将其转换为派生类可以吗
- 如何在不使用数学的情况下知道一个数字是否是回文
- 确定一个方法是否是纯虚拟的(c++)
- 检查对象是否是具有模板的类的实例
- 如何检查对象是否是基类类型
- C++是否有现有的方法来检查对象是否是派生类型对象
- 检查一个字符串是否是另一个字符串的排列C++
- C++检查对象是否是给定超类的后代
- 有没有一种方法可以测试一个输入是否是C++中的数字
- 确定一个向量是否是另一个向量的子集的有效方法
- 如何检查一个对象是否是Nan 2中的构造函数的实例?
- 有什么技巧可以检测对象是否是在执行另一个析构函数时创建的
- 是否有好的方法来确定一个对象是否是另一个对象的克隆