gpt4 book ai didi

c++ - 如何实现两个类自动判定深拷贝和浅拷贝?

转载 作者:行者123 更新时间:2023-11-28 03:28:14 28 4
gpt4 key购买 nike

我有以下设计问题:
我有一个带有两种访问器的 Resource:

  • 一个是修改它(我们称它为Access)
  • 一个用于类似 const 的访问(我们称之为 Const_access),但您可以说 c1=c2 然后 c1 将访问 c2。

鉴于Resource很大,我必须实现以下复制机制:

Access->Access:             deep copy
Access->Const_access: deep copy
Const_access->Access: deep copy
Const_access->Const_access: shallow copy

我的目标是编写 Access 以便 Const_access 能够准确使用 Access 中的 const 函数.我当前的实现有缺陷,使用:

class Access {
public:
Access(const Access&); // deep copy
void method(const Access&);
void const_method() const;
protected:
Resource res;
};
class Const_access : public Access{
private:
void method(); // only declaration
public:
Const_access(const Const_accesss&); // shallow copy
explicit Const_access(const Access&); // deep copy
};

但是这里 Const_access ca; ca.Access::method() 仍然有效,我必须手动隐藏非常量访问器。我尝试过 protected 或私有(private)继承,但这也限制了 Access& 处理 Const_Access& 的灵 active 。

这个问题的正确解决方案是什么?

最佳答案

你说的是矛盾的。

一方面,您想禁止以下内容:

Const_access foo;
foo.modify();

但另一方面,您确实希望允许这样的事情:

void bar(Access& a) {
a.modify();
}

Const_access foo;
bar(foo);

这没有意义。

一个更符合逻辑的关系是把继承结构反过来:

class Const_access {
public:
Const_access(const Const_access&); // shallow copy
void const_method() const;
protected:
Resource res; // or perhaps a reference-counted pointer?
};

class Access: public Const_access {
public:
Access(const Access&); // deep copy
explicit Access(const Const_access&); // deep copy
void method();
};

唯一没有提供的是将 Access 转换为 Const_access 时的深拷贝。

关于c++ - 如何实现两个类自动判定深拷贝和浅拷贝?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13343646/

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