Использование libC++ (диалект GNU ++ 11), компилятор LLVM, в Xcode на Mac.Создание общего указателя на новую структуру с инициализацией
У меня есть на структуру следующим образом:
struct Vertex
{
float position[3];
float colour[4];
float normal[3];
};
В настоящее время я создаю экземпляр на куче следующим образом:
Vertex *vertex = new Vertex({{0.1f, 0.1f, 0.1f},
{0.0f, 0.0f, 0.0f, 0.0f},
{1.0f, 0.0f, 0.0f}});
Однако я хочу, чтобы создать общий указатель вместо этого. Является ли следующий код лучшим способом?
Vertex v = Vertex({{0.1f, 0.1f, 0.1f},
{0.0f, 0.0f, 0.0f, 0.0f},
{1.0f, 0.0f, 0.0f}});
std::shared_ptr<Vertex> vertex = std::make_shared<Vertex>(v);
Или я должен создавать Vertex
используя new
прежде, чем сделать общий указатель?
Update
Я попытался следующие:
auto vertex = std::make_shared<PCNVertex>({{0.1f, 0.1f, 0.1f},
{0.0f, 0.0f, 0.0f, 0.0f},
{1.0f, 0.0f, 0.0f}});
как это было предложено, но я получаю ошибку no matching function for call to 'make_shared'
.
Обычно вы просто заменить 'PCNVertex * vertex' с' авто verte2' и 'новый PCNVertex (...),' 'с станд :: make_shared (...);' –
NathanOliver
@NathanOliver I «Я уже это пробовал, я получаю« Ошибка: (140, 19) нет соответствующей функции для вызова «make_shared» –
Какой компилятор вы используете и какие параметры вы используете для компиляции? Включен ли C++ 11? – NathanOliver