c – 为智能指针编写复制构造函数的问题
我正在使用的代码有自己的智能指针实现,它可以进行简单的引用计数.是的,我们不应该有自己的实施.是的,我们应该使用boost或者其中之一.忍受我.
我发现我想编写这样的代码: ... CountedPointer<Base> base; ... CountedPointer<Derived> derived; ... base = derived; 但是,CountedPointer的复制构造函数有一个这样的原型: CountedPointer(const CountedPointer<T> &other); 所以上面的代码将无法编译,因为它无法找到合适的构造函数(或赋值运算符 – 它在那里是相同的故事).我尝试用这样的原型重写复制构造函数: template<U> CountedPointer(const CountedPointer<U> &other); 但是,我遇到了这样的问题:复制构造函数必须访问它正在复制的对象的私有成员(即原始指针),如果它在CountedPointer的不同专用中,则它们不可见. Alexandrescu通过为封装指针提供访问器函数来避免在他的库Loki中出现这个问题,但是如果可能的话,我宁愿不直接访问原始指针. 有什么方法可以写这个来允许派生到基本副本,但不允许一般访问原始指针? 更新: 解决方法
你不能让他们成为朋友吗?喜欢:
template<typename T> class CountedPointer { // ... template<U> CountedPointer(const CountedPointer<U> &other); template<typename U> friend class CountedPointer; }; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |