有没有一种好的方法将 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*) {});
}
reinterpret_pointer_cast
更好。事实上,reinterpret_pointer_cast
似乎是一个坏主意。它只消除了重新解释一级指针的情况。如果有多级指针(例如,***char
),它会崩溃并创建需要更多语义技巧的情况。而lambda捕获可以在这种情况下更统一地应用。 - grovkin