好的,我有一些代码看起来是可以工作的,但我不确定它是否总是有效。我正在使用类的一个成员作为映射键将unique_ptr移动到stl map中,但我不确定在某些情况下移动是否会使指针失效。
代码大致如下:
struct a
{
std::string s;
};
std::map<std::string, std::unique_ptr<a>> m;
std::unique_ptr<a> p = std::make_unique<a>();
// some code that does stuff
m[p->s] = std::move(p);
这样目前似乎是可以工作的,但我认为在将字符串用作映射键之前,有可能会使 p 无效,这将导致内存异常。显然,我可以在移动之前创建一个临时字符串,或者通过迭代器进行赋值,但如果不必要,我宁愿不这样做。