4

我正在将一个 Objective-C 应用程序移植到 C++ 中,我决定创建一个类似于 NSObject 和 NSDictionary 的类。如果你不熟悉这个系统,NSObject 是一个对象,它所有对象都继承了 Obj-C 中的形式,然后它里面有一个引用计数机制。当没有更多引用时,对象会释放自己。

在我的代码中,我希望能够执行以下操作

CMDictionary["Key"] = Object;

在内部,这存储为

Map<string, CMObject*> mDictionary

每当一个新对象被分配给该对象时,字典必须通过调用其保留函数以及对该新对象可能已替换的任何对象调用释放来保留该对象。我的问题源于这样一个事实,即我无论如何都找不到运行代码并确定何时在赋值中使用括号,因为我不希望在编写类似的东西时调用保留函数

CMDicionary["key"]->StringValue();

无论如何都会这样做,还是我只需要使用 getter/setter 函数来修改我的字典

4

3 回答 3

5

在这种情况下,您通常会执行以下操作:

Object const& Map::operator[](string) const;
Object& Map::operator[](string);

请注意,我写Object&的是Object. 无论如何,您都可以实例化一个新对象并将其分发出去,依赖于一个Object& Object::operator=(Object const&)要实现的属性,然后在您的函数返回Map::operator[]执行分配(不用担心,在大多数情况下编译器会优化它)。

于 2012-07-14T00:23:12.450 回答
1

您应该重载operator[]以接受字符串。

http://courses.cms.caltech.edu/cs11/material/cpp/donnie/cpp-ops.html

于 2012-07-14T00:14:34.953 回答
1

考虑编写一个类似于该对象的新类shared_ptr<CMObject*>并在该对象内部执行保留/释放。

于 2012-07-14T00:23:55.290 回答