我不确定完全了解何时在原始指针上使用智能指针。
我有以下代码结构。
首先,Snake_cell
定义如下
struct Snake_cell
{
Snake_cell(const unsigned int origin_x, const unsigned int origin_y)
unsigned int origin_x_;
unsigned int origin_y_;
};
然后,我有一个Snake
,其中包含vector
Snake_cell
class Snake
{
public:
Snake(const unsigned int first_cell_x, const unsigned int first_cell_y);
private:
std::vector<std::shared_ptr<Snake_cell>> cells_;
};
Snake::Snake(const unsigned int first_cell_x, const unsigned int first_cell_y)
{
// Create three successives cells
cells_.emplace_back(std::make_shared<Snake_cell>(first_cell_x, first_cell_y));
cells_.emplace_back(std::make_shared<Snake_cell>(first_cell_x + CELL_SIZE, first_cell_y));
cells_.emplace_back(std::make_shared<Snake_cell>(first_cell_x + 2 * CELL_SIZE, first_cell_y));
}
最后,我有一个遵循以下格式的main.cpp
文件:
std::unique_ptr<Snake> snake(std::make_unique<Snake>(500-CELL_SIZE, 500-CELL_SIZE));
void func1(...)
{
}
void func2(...)
{
}
void func2(...)
{
}
/** Main **/
int main(int argc, char* argv[])
{
return 0;
}
这些功能中的每一个或其中一些都是渲染功能,所以它们会被调用很多时间。
Snake
属性Snake
属性因此,对我来说这是有意义的,以避免将Snake_cell
或Snake
个对象的不必要副本复制到:
vector
smart pointers
Snake_cell
至Snake
smart pointer
Snake
到main.cpp
然而,我认为我做得不对,可以使用原始指针。
我的假设在这里使用pointers
是否正确? 我知道我们没有处理大量数据,但会调用funcX
很多时间因此可能会变得昂贵
如果是的话,我在这里使用smart pointers
是对的吗? 我已经读过,每次我都应该优先考虑原始指针; m考虑使用指针。
如果是,我是否可以在此使用shared_ptr
? 在我的代码中,我创建了一个新的smart_ptr
对象每当我需要使用它时,在snake
对象上。我觉得这不是正确的使用方式。
例如,这是我正在使用的一个功能。
void display()
{
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(1.0f, 1.0f, 1.0f);
glBegin(GL_QUADS);
for(unsigned int i = 0; i < snake->size(); ++i)
{
std::shared_ptr<Snake_cell> cell(snake->getCell(i));
glVertex2i(cell->origin_x_, cell->origin_y_);
glVertex2i(cell->origin_x_ + CELL_SIZE, cell->origin_y_);
glVertex2i(cell->origin_x_ + CELL_SIZE, cell->origin_y_ + CELL_SIZE);
glVertex2i(cell->origin_x_, cell->origin_y_ + CELL_SIZE);
}
glEnd();
glutSwapBuffers();
}
感谢您的帮助,