我正在漫游-我可以使用std::shared_ptr作为Map键吗?更具体地,指针的引用计数器可能不同于它在被分配给Map时所具有的值。它在Map上会被正确识别吗?
std::shared_ptr
fcwjkofz1#
是的,你可以。std::shared_ptr定义了operator<的方式适合于Map键的使用。特别是,只比较指针值,而不比较引用计数。显然,被指向的对象不是比较的一部分,否则,通过修改被指向的对象,使Map中的顺序与比较不一致,很容易使Map无效。
operator<
yeotifhr2#
是的,您可以......但是要小心。operator<是根据指针定义的,而不是根据所指对象定义的。
int main() { std::map<std::shared_ptr<std::string>, std::string> m; std::shared_ptr<std::string> keyRef = std::make_shared<std::string>("Hello"); std::shared_ptr<std::string> key2Ref = std::make_shared<std::string>("Hello"); m[keyRef]="World"; std::cout << *keyRef << "=" << m[keyRef] << std::endl; std::cout << *key2Ref << "=" << m[key2Ref] << std::endl; }
印刷品
Hello=World Hello=
2条答案
按热度按时间fcwjkofz1#
是的,你可以。
std::shared_ptr
定义了operator<
的方式适合于Map键的使用。特别是,只比较指针值,而不比较引用计数。显然,被指向的对象不是比较的一部分,否则,通过修改被指向的对象,使Map中的顺序与比较不一致,很容易使Map无效。
yeotifhr2#
是的,您可以......但是要小心。
operator<
是根据指针定义的,而不是根据所指对象定义的。印刷品