我对输入对象的 std::set 类和范围有疑问。
请考虑代码:
#include <iostream>
#include <set>
using namespace std;
class K {
private:
    int m_a;
  ...
public:
    K(int temp) { m_a = temp; }
  ...
};
int main ()
{   
    set<K> mySet;
    for(int i=0; i<10;i++)
    {
        K a(rand());
        mySet.insert(a);
    }
    return 0;
}
这段代码可以吗?由于 std::set.insert(.) 通过引用获取值,当 mySet 包含“a”值时,插入的所有“a”值是否都需要在范围内?在这种情况下,有 10 个具有不同 m_a 值的“a”实例。
在这种情况下,在 for 循环的每次迭代中,当前的“a”都会超出范围。在这种情况下动态分配“a”是否正确,如下所示:
for(int i=0; i<10;i++)
{
    K *a = new K(rand());
    mySet.insert(*a);
}
当然,当 mySet 被销毁时,所有插入的“a”值(K 类型)都应该被删除。我上面说的准确吗?
谢谢。