当前位置:  开发笔记 > 编程语言 > 正文

无法按值复制的指针容器类

如何解决《无法按值复制的指针容器类》经验,为你挑选了1个好方法。

我需要一个智能指针用于我的项目,可以作为参数发送到几个方法.我从boost 检查了auto_ptrshared_ptr.但IMO,这不符合我的要求.以下是我的发现

auto_ptr:当传递给另一个方法时,将转移所有权,并在该方法的范围结束时删除基础指针.我们可以通过引用传递auto_ptr来解决这个问题,但是没有编译时机制来确保它总是通过引用传递.如果错误地,用户忘记传递引用,则会产生问题.

boost :: shared_ptr:这看起来很有前途,可以满足我的需要.但我觉得这对我的项目来说太过分了,因为它很小.

所以我决定编写一个简单的模板化指针容器类,它不能被值复制并注意删除底层指针.这里是

template 
class simple_ptr{
public:
    simple_ptr(T* t){
       pointer = t;
    }
    ~simple_ptr(){
       delete pointer;
    }
    T* operator->(){
       return pointer;
    }
private: 
    T* pointer;
    simple_ptr(const simple_ptr& t);
};

这个实现是否正确?我已经将复制构造函数设置为私有,因此编译器会在有人尝试按值传递时发出警报.

如果指针被删除,则对析构函数的删除操作将抛出断言错误.我该如何解决这个问题?

我对C++很陌生,你的建议非常感谢.

谢谢



1> j_random_hac..:

请使用Martin York建议的boost :: scoped_ptr <>,因为它:

完全符合你的要求(这是一个不可复制的指针)

没有高于标准C指针的开销

由超级智能C++向导精心制作,以确保其行为符合预期.

虽然我看不出你的实现有任何问题(在应用了ChrisW建议的更改之后),C++有很多黑暗的角落,如果有一些模糊的角落情况我不会感到惊讶你,我和其他人都未能点.

推荐阅读
pan2502851807
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有