gpt4 book ai didi

c++ - 让复制构造函数进行浅复制不是很糟糕吗?

转载 作者:行者123 更新时间:2023-12-02 01:58:01 25 4
gpt4 key购买 nike

假设我已经定义了一些类 BC

现在,让我们考虑以下类:

class A{
public:
int att1;
int att2;
std::shared_ptr<B> b_ptr;
std::shared_ptr<C> c_ptr;
A(const A& a);
};

现在的问题是如何实现复制构造函数。

当前代码中正在执行以下操作:

A::A(const A& a){
att1 = a.att1;
att2 = a.att2;
b_ptr = a.b_ptr;
c_ptr = a.c_ptr;
}

最后两行将调用 std::shared_ptr 的复制构造函数,并将底层指针的所有者数量增加 1。

但是,让复制构造函数执行此操作不是一个坏主意吗?这意味着在任何地方调用复制构造函数时,它实际上都会与初始对象产生关系,因为类 BC 的对象实际上并未被复制,而只是被复制。指针是。

我意识到,由于使用了shared_ptr,至少这不会造成任何内存泄漏。

这样做是常见做法吗?有正当理由这样做吗?或者我应该一起避免这一切?

最佳答案

假设 A 类是 Person 类,B 类是 car 类。

Person 类的拷贝指向同一辆原始汽车可以吗?是的

--- 所以只复制一个指针就可以了。

当 Person 的最后一个拷贝被销毁时,汽车也会被销毁,这样可以吗?是的

--- 所以只复制智能指针就可以了。

Person 类的拷贝可以获得其自己的汽车拷贝,这样可以吗?是的

--- 所以复制整个指向的对象也是可以的。

所有这些语义都是有效的。您可以选择适合您逻辑的选项。

关于c++ - 让复制构造函数进行浅复制不是很糟糕吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69398669/

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