gpt4 book ai didi

带指针的 C++ STL 容器 : A few questions

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:39:21 27 4
gpt4 key购买 nike

假设您有一个类型 T 和子类型 TSub1TSub2 等。

这些子类型中有几个是用 new TSub(...) 初始化的。然后将生成的指针作为元素存储在:

list<T*> tsList;

相同的指针也用作键:

map<T*,V> tsMap;

现在考虑对 tsList 进行迭代,迭代器变量为 tIter

这是我的问题:

  1. Will tsMap[*tIter] and tsMap.find(*tIter) both successfully find the correct associated value?

  2. Will delete *tIter successfully free the full memory block allocated for the relevant TSub even though STL sees the type as T?

  3. Assume there is a defined method T::foo() and override TSub::foo().

    Will (*tIter)->foo() call T::foo() or TSub::foo() ?

上下文是:每个 TSub 都希望以单例方式实例化,但以允许迭代考虑的方式存储为父类(super class)型,并在被调用的子类中覆盖方法。

如果您能提供明智的解释,我将不胜感激。感谢您的宝贵时间!

最佳答案

Will tsMap[*tIter] and tsMap.find(*tIter) both successfully find the correct associated value?

是的,但是如果 tsMap[*tIter] 找不到键,它会创建一个默认值。

Will delete *tIter successfully free the full memory block allocated for the relevant TSub even though STL sees the type as T?

当且仅当 T 的析构函数是虚函数

Assume there is a defined method T::foo() and override TSub::foo().

Will (*tIter)->foo() call T::foo() or TSub::foo() ?

如果 T::foo 不是虚拟的,它将调用 T::foo。否则它将调用 TSub::foo()

关于带指针的 C++ STL 容器 : A few questions,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7292948/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com