我有一个不太小的类正在开发中(它经常更改),我不需要提供公共的复制构造函数和复制指定。 该类具有值语义的对象,因此默认复制和分配工作。有一种方法来声明复制构造函数非公开和使用默认复制构造函数?
该类处于层次结构中,具有虚拟方法,所以我提供了一个虚拟Clone()以避免切片并执行“多态复制”。
我不想声明复制分配和构造受保护的AND来定义它们(并保持与变化同步),除非我有一些特殊的事情要执行。
有人知道是否有另一种方式吗?
谢谢!
UgaSofT
我有一个不太小的类正在开发中(它经常更改),我不需要提供公共的复制构造函数和复制指定。 该类具有值语义的对象,因此默认复制和分配工作。有一种方法来声明复制构造函数非公开和使用默认复制构造函数?
该类处于层次结构中,具有虚拟方法,所以我提供了一个虚拟Clone()以避免切片并执行“多态复制”。
我不想声明复制分配和构造受保护的AND来定义它们(并保持与变化同步),除非我有一些特殊的事情要执行。
有人知道是否有另一种方式吗?
谢谢!
UgaSofT
来自多态层次结构的对象和值语义?这里不对劲。
如果您确实需要您的类具有值语义,请查看J.Coplien的Envelop-Letter成语或本文中关于Regular Objects [1]的内容。
[1]肖恩家长。 “超越对象”。了解我们编写的软件。 http://stlab.adobe.com/wiki/index.php/Papers_and_Presentations。 C++连接。 11月2005.
HTH,
我不认为这是在C++语言,允许你做这种事。尽管我很想在这一点上做错。
我在过去遇到过这种情况,想出了以下解决方案。假定班级是C1。
这种方法有几个缺点。即感觉有点不自然,并且消除了直接的字段访问(可以通过小的访问函数来缓解)。
这是一个迂回的做你正在寻找的方式,但它避免了你必须手工编写拷贝构造函数。
也许我已经找到了解决办法...
我可以把我的根基类(或者我可以创建一个小的接口类,没有数据成员,并执行多重继承)这里是空的受保护的拷贝构造函数。 我不重新定义派生类中的Copy ctor,当默认的那个没关系。现在,客户端无法访问默认拷贝ctor(导致基座无法访问),但默认工作!
有一些反对意见吗?
如果你可以使用C++ 0x ...
class A
{
protected:
A(const A&) = default;
};
你很清楚。你想让默认拷贝文件可供内部使用,但只是不公开正确? – 2008-11-06 16:09:28
哎呀...这应该是“你不太清楚”。 – 2008-11-06 16:10:08