自动C++内存/对象实例管理?智能指针



我希望在我的C++项目中有自动内存处理。

我不介意有一些额外的约定来获得这种自动内存处理——具体地说,我不介意在创建新的对象实例时有一些特殊的编码(当然,不要更多,因为这会破坏目的)。

在阅读了stackoverflow中的许多有用讨论后,我发现"智能指针"被引用最多(还有一些第三方c++垃圾收集器的引用)。

由于只有一些"教科书式"的C++知识,我认为C++GC的复杂性使它们不值得使用,就我而言。

另一方面,我有.NET/Java背景,我也想在C++上利用这一经验。我习惯于创建对象实例并将它们传递给其他类/函数(我相信这在C++中也是一些面包和黄油的东西)。

那么,智能指针/shared_ptr/boost是我想要的吗?

(注意,对于内存获取,我指的是进行MyClass* var = new MyClass(),而不是malloc()。)

一些特定背景:

事实上,我正试图写一些库函数,这些函数可以在C++项目和iPhone项目中使用(请注意,这些是一些纯逻辑的业务类,因此不应该存在可移植性问题)。虽然我认为这不是一个需要高性能的领域(iPhone的非游戏应用程序),但我对资源使用有一些担忧。

在这种情况下使用智能指针有什么问题吗?还有更好的选择吗?

是否考虑引用计数?创建一个基类,该基类记录它被引用的频率,并在引用次数降至零时删除它自己。

class RefCounter
{
    public:
        RefCounter() : mRefCount(1) { }
        virtual ~RefCounter() { }
        void retain() { mRefCounter++; }
        void release() {
            if(mRefCount) mRefCount--;
            if(!mRefCount) delete this;
        }
    protected:
        unsigned int mRefCounter;
};

任何需要实例的引用对象都会调用它的retain()函数,完成后,它会调用release()。调用release的最后一个对象将导致实例删除自身。您必须小心地平衡保留和释放,但这项技术本质上是GC的工作方式,只是GC实现对您隐藏了这种引用计数。

在自动GC风靡一时之前,我就学习了C++,而且我从未真正对这个概念感兴趣,因为我知道每个字节的内存是在何时何地分配和释放的,我感到更加安全。但那只是我。

相关内容

  • 没有找到相关文章

最新更新