我对输入对象的 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 类型)都应该被删除。我上面说的准确吗?
谢谢。