Есть ли какое-то специальное использование для типа "std :: shared_ptr <void>"? Или это неправильное использование общего указателя? - PullRequest
0 голосов
/ 16 июня 2020

Я понимаю std::shared_ptr<int>, std::shared_ptr<someClass> и т.д. c. Я тоже понимаю void. Но я смутился, когда недавно увидел такое объявление (т.е. std::shared_ptr<void>). Это неправильное использование общего указателя? Или есть какое-то специальное использование?

Может быть, чтобы скрыть истинный тип чего-либо (с чем я согласен с @ user4581301). Я хочу сказать, чтобы скрыть реализацию. Думаю, я прав. Но такого фрагмента кода я раньше не видел. Поэтому я публикую этот вопрос и надеюсь подтвердить свое предположение.

Фрагмент кода, который я видел, выглядит примерно так (он был упрощен, проверьте cpp .sh / 967f4z):

#include <memory>
#include <iostream>

int main()
{
    std::shared_ptr<void> p = std::make_shared<int>(5);
    std::cout << *(std::static_pointer_cast<std::shared_ptr<int>>(p)) << std::endl;
}
...