Возврат ссылки константы на вектор объекта

Здесь я нашел (через , взломал что-то, что Michael Feathers говорит, что это может быть ответом:

Он говорит,

, тест А не является модульным тестом если:

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

Снова в той же статье он добавляет:

Обычно модульные тесты, как предполагается, являются маленькими, они тестируют метод или взаимодействие нескольких методов. Когда Вы вытягиваете базу данных, сокеты или доступ к файловой системе в Ваши модульные тесты, они больше не действительно о тех методах; они об интеграции Вашего кода с тем другим программным обеспечением.

11
задан Jamal 4 July 2014 в 16:48
поделиться

3 ответа

Строка 3 работает, потому что t2 создается копией из ссылки возвращается getS ()

То, как вы определяете константой ссылку, возвращаемую getS (), подходит. Вы также можете использовать const-qualify getS (), например:

const vector<int>& getS()const;

, чтобы getS () мог быть вызван для const sys.

13
ответ дан 3 December 2019 в 05:58
поделиться

Строка 3 работает, потому что c ++ вызывает конструктор копирования для вектора.

Ваша функция возвращает ссылку, эта ссылка передается в конструктор копирования вектора, и создается ваша переменная t2.

] Это разрешено, поскольку конструктор копирования вектора не определен как явный.

Вы не можете защититься от этого с помощью общего типа. В вашем собственном классе вы можете явно отметить конструктор копирования, и присвоение не будет выполнено.

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

const vector<int>* getS() {return &s;} //(4)
5
ответ дан 3 December 2019 в 05:58
поделиться

Строка (3)

Для типа int скопировать тривиально. Если вы помещаете туда объекты и у них есть Copy CTor, это также будет работать.

Строка (4)

Сделайте это

const vector<int>& getS() const {return s;}

, чтобы функция также была объявлена ​​как const.
И назовите это так

const vector<int> & t1 = my_sys->getS(); 
2
ответ дан 3 December 2019 в 05:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: