У меня есть следующий фрагмент кода:
QList<const GLMeshPtr*> meshList;
m_itemsList->getSelectedMeshes(meshList);
for (auto m : meshList)
{
if (GLBodyPtr c = (*m)->getStandard()) {
c->executeMeshFix();
}
}
GLMeshPtr
установлено как в этом typedef
:
typedef std::shared_ptr<GLMesh> GLMeshPtr;
Определение m_itemsList->getSelectedMeshes
:
void QMeshList::getSelectedMeshes(QList<const GLMeshPtr*>& list)
{
for (auto& m : m_meshList) {
if (m->isSelected()) {
list.push_back(m->getGLMesh());
}
}
}
Определение для getGLMesh
:
const GLMeshPtr* getGLMesh() const { return &m_glmesh; } // where m_glmesh is a GLMeshPtr.
Мой вопрос очень прост, но я не смог найти на него никакой ссылки. Создает ли ключевое слово *
копию значения в стеке, обязательно, или оно использует значение «на месте»?
Я более конкретно говорю об этой строке:
if (GLBodyPtr c = (*m)->getStandard()) {
Создаю ли я ненужные копии GLBodyPtr? Я не хочу, чтобы кто-то здесь разделял указатель.