我希望我的班级是:
class NumberedString : public Object {
public:
String newName;
short nameID;
NumberedString(String &newName, short nameID) : newName(newName), nameID(nameID) {}
};
HashMap uniqueStrs;//For later.
它的实例将传递给HashMap
接管其堆分配所有权的 a:
在 HashMap.h 中(比如说):
virtual result Add(const Object& key, const Object& value);
现在这就是我感到困惑的地方。String
我在调用的行中分配了Add
:
uniqueStrs.Add(*(new String(L"XYX_say")), *pNewLoc);
然后HashMap
尽管只接受对它的引用,但它会为我释放这个内存。C
也许我在新千年中失去了十年,但我认为这是不可能的?
如果不是,那么我应该能够编写如下内容:
~NumberedString() {
delete &newName;
}
为我的课,但我永远不会猜到,除非我看到这个库HashMap::RemoveAll()
做同样的事情。这个问题表明这是不可能的,但可以依赖auto_ptr
并且shared_ptr
我的“平台仅支持 STL(标准模板库(http://www.sgi.com/tech/stl/))”。(在整个“标准 C++ 库”中)。所有答案都可以避免此类引用。
谢谢你。
评论提示的链接
我无法将链接作为评论发布,因此请查看Add
方法及其建议使用示例:这里还有 Benj,String is not std::string no,抱歉。
还
我知道尝试删除堆栈对象可能会导致崩溃,但我不知道如何HashMap
声称能够删除堆对象。我已经编写了上面的类来尝试重新创建这种行为,但我无法完成这一壮举,因此出现了问题。
回应“无用”
@Useless:可能不能传递给foo(int &bar)
变量*pBar
,声明int pBar = new int(1);
然后foo
承担所有权
foo(int &bar) {
int *__pBar = &bar;
delete __pBar;
}
? 我打算尝试,但我开始谨慎,不要太相信文档所说的内容。虽然它是从标题中生成的
class _EXPORT_BASE_ HashMap :
public IMap,
public Object
{
virtual result Add(const Object& key, const Object& value);
//other stuff
};