gpt4 book ai didi

c++ - 如何在不使用 bool 参数的情况下实现深拷贝构造函数和浅拷贝构造函数?

转载 作者:行者123 更新时间:2023-12-04 14:47:21 24 4
gpt4 key购买 nike

我有以下类(class):

class A {
int small;
std::shared_ptr<B> big;
};

这里,B 是一个类,其对象预计具有非常大的大小。在我的程序中,我有一个 A 类的原始对象,然后制作多个拷贝,然后复制拷贝等。

有时,我需要做一个深拷贝,因为所有的成员都可能被修改。其他时候,我知道我不会对 A::big 进行任何更改,因此我只想复制指针以节省资源(分析器告诉我这是一个瓶颈).

目前,我有以下内容:

A(const A& other, bool doDeepCopy): 
small{other.small}, big{doDeepCopy ? std::make_shared<B>(*other.big) : other.big} {}

我知道使用 bool 参数 is considered bad style ,但我不知道还能做什么。默认复制构造函数进行浅拷贝,我可以将其封装在函数 A A::makeShallowCopy() 中。但是另一个构造函数应该是什么样子呢?它唯一需要的输入是 A 类型的对象,但我显然不能有两个具有相同签名的函数。

最佳答案

假设 B 有一个复制构造函数,只需添加:

class A {
int small;
std::shared_ptr<B> big;

public:
A clone() const {
return { small, std::make_shared<B>(*big) };
}
};

因此 clone() 成为深度复制数据的唯一方法。


这就是 OpenCV 和 Eigen 中用于矩阵的方法:默认情况下复制是浅的,需要显式调用 replicate()clone()深拷贝。

关于c++ - 如何在不使用 bool 参数的情况下实现深拷贝构造函数和浅拷贝构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69795658/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com