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

标签 iphone c++ smart-pointers

我想在我的 C++ 项目中进行自动内存处理。

我不介意有一些额外的约定来获得这种自动内存处理——具体来说,我不介意在创建新对象实例时有一些特殊的编码(当然,除了它违背了目的)。

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

仅具备一些“教科书”C++ 知识,我认为 C++ GC 的复杂性使它们不值得使用,就我而言。

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

So, is smart pointers/shared_ptr/boost what I am looking for?

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

一些具体的背景:

其实我真正想做的是写一些库函数,既可以在C++项目中使用,也可以在iPhone项目中使用(注意,这些是一些纯逻辑的业务类,所以应该没有可移植性问题)。虽然我认为这不是一个需要高性能的领域(iPhone 的非游戏应用程序),但我对资源使用有一些担忧。

Is there any issue in making use of smart pointers in this situation? Are there any better alternatives?

最佳答案

考虑引用计数?创建一个基类,记录它被引用的频率,并在引用计数降为零时删除自身。

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++,但我从未真正对这个概念感兴趣,因为知道每个字节的内存分配和释放的确切时间和位置,感觉更加安全。但这就是我。

关于iphone - 自动 C++ 内存/对象实例管理?智能指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9858424/

相关文章:

iphone - UITableView 上有多个图像

ios - 自动滚动到 Swift 中 PFQueryTableViewController 中的下一个单元格

c++ - 我需要在 Destructor 中删除 CriticalSection 吗?

c++ - 如何将对象的构造限制为几种方法?

c++ - 智能指针/编码模式的名称

iphone - 设备 token 和推送通知

iPhone 按日期排序核心数据 NSFetchedResultsController

c++ - 是否有 `notify_one()` 的 `std::condition_variable` 队列?

c++ - 在 Boost MultiArray 中访问元素的最快方法

C++ 使用 C++11 (std::shared_ptr) 分配 shared_ptr:将 shared_ptr 初始化为临时变量是否仍然不好?