Kom*_*ave 4 c++ pointers stl subclass
比方说,你有型T和亚型TSub1,TSub2等等.
其中一些子类型已初始化new TSub(...).然后将结果指针存储为以下元素:
list<T*> tsList;
Run Code Online (Sandbox Code Playgroud)
相同的指针也用作键:
map<T*,V> tsMap;
Run Code Online (Sandbox Code Playgroud)
现在考虑使用迭代tsList器变量进行迭代tIter.
这是我的问题:
将
tsMap[*tIter]与tsMap.find(*tIter)这两个成功找到正确关联的值?即使STL将类型视为 ?,是否会
delete *tIter成功释放为相关分配的完整内存块?TSubT假设有一个已定义的方法
T::foo()和覆盖TSub::foo().会
(*tIter)->foo()打电话T::foo()还是TSub::foo()?
上下文是:每个TSub都希望以单例方式实例化,但是以允许迭代考虑作为超类型的方式存储,其中调用子类中的方法.
我非常感谢一个明智的解释.感谢您的时间!
tsMap [*tIter]和tsMap.find(*tIter)都能成功找到正确的关联值吗?
是的,但如果找不到密钥,tsMap [*tIter]将创建一个默认值.
即使STL将类型视为T,delete*tIter是否会成功释放为相关TSub分配的完整内存块?
当且仅当T的析构函数是虚拟的
假设有一个已定义的方法T :: foo()并覆盖TSub :: foo().
将(*tIter) - > foo()调用T :: foo()或TSub :: foo()?
如果T :: foo不是虚拟的,它将调用T :: foo.否则它将调用TSub :: foo()