Правильный способ передачи ссылки в качестве аргумента в класс - PullRequest
0 голосов
/ 12 апреля 2019

Я пытаюсь сохранить ссылку на другой объект в классе, поэтому я использую указатель в качестве члена.Каков наилучший способ передачи ссылки и в чем разница между ними.

class Sprite
{
public:
    Sprite();
    void SetTexture(Texture * const& texture);
    void SetTexture(Texture & texture);
private:
    Texture *m_texture;
};

void SetTexture (текстура * const & texture) или void SetTexture (текстура и текстура)?не хочу менять текстуру внутри класса Sprite, поэтому я пытаюсь использовать const.

Ответы [ 2 ]

0 голосов
/ 12 апреля 2019

Конечно, нет void SetTexture(Texture* const&);.
Хотя это работает, передача небольших тривиальных типов, таких как указатели, по ссылке на константу является бессмысленной пессимизацией.

void SetTexture(Texture&); имеет смысл, если должна быть текстура,void SetTexture(Texture*) будет более подходящим, если текстура является необязательной.

Конечно, если получатель никогда не изменяет текстуру, это должно быть отражено в подписи, а также в элементе, пометив Textureconst.

0 голосов
/ 12 апреля 2019

1) чтобы ответить на ваш вопрос, вы должны использовать указатель, если он будет находиться за пределами стека вызывающих.То есть, если класс Sprite создается внутри вызывающей функции или класса, то вы можете (и должны) использовать ссылку.

2) Если вы собираетесь использовать указатель и константный указатель, выдолжна сделать вашу переменную-член const тоже.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...