我正在将Objective-C应用程序移植到C ++,我决定创建一个类似于NSObject和NSDictionary的类。如果您不熟悉这个系统,NSObject是一个对象,所有对象都在Obj-C中继承,然后在其中有一个引用计数机制。当没有更多引用时,该对象将自行释放。
在我的代码中,我希望能够执行以下操作
CMDictionary["Key"] = Object;
在内部,它存储为
Map<string, CMObject*> mDictionary
每当将一个新对象分配给该对象时,该字典必须通过调用其retain函数以及在该新对象可能已替换的任何对象上调用release来保留该对象。我的问题源于这样一个事实,即无论如何我都找不到运行代码并确定何时在赋值中使用括号,因为我不希望在写出类似
之类的东西时调用retain函数CMDicionary["key"]->StringValue();
无论如何都会这样做,或者我是否需要使用getter / setter函数来修改我的字典
答案 0 :(得分:5)
在这种情况下,您通常要执行以下操作:
Object const& Map::operator[](string) const;
Object& Map::operator[](string);
请注意,我写了Object&
而不是Object
。您无论如何都可以实例化一个新的对象并将其交付出来,依靠适当的Object& Object::operator=(Object const&)
来执行,然后执行分配, 后Map::operator[]
函数返回(别担心,编译器会在大多数情况下对其进行优化)。
答案 1 :(得分:1)
您应该重载operator[]
以接受字符串。
http://courses.cms.caltech.edu/cs11/material/cpp/donnie/cpp-ops.html
答案 2 :(得分:1)
考虑编写一个类似于shared_ptr<CMObject*>
的新类,并在该对象内部进行保留/释放。