有没有一种方法可以将shared_ptr<char>
转换为shared_ptr<unsigned char>
?
我想出了以下内容,但它看起来并不干净。
int main(int argc, char** argv)
{
std::shared_ptr<char> p1 = std::make_shared<char>();
std::shared_ptr<unsigned char> p2 = std::shared_ptr<unsigned char>(
reinterpret_cast<unsigned char*>(p1.get()),
[p1](unsigned char*) {});
}
答案 0 :(得分:6)
您正在做的事情有一个现成的功能,reinterpret_pointer_cast
:
std::shared_ptr<unsigned char> p2 =
std::reinterpret_pointer_cast<unsigned char>(p1);
结果指针与原始指针共享所有权。
相比之下,您自己的代码最终会有两个单独的所有权组。如果原始组首先死亡,则新指针将悬空!
如果您使用别名构造函数,可以使用p1.get()
并与原始指针共享所有权。事实上,这些施法助手是如何实施的(见链接):
std::shared_ptr<unsigned char> p2(p1, reinterpret_cast<unsigned char*>(p1.get()));
这会创建一个与p1
共享所有权的共享指针,但会将给定的值存储为第二个构造函数参数。