Имеется класс-синглтон для покрытия тестами используя gmock framework. Некоторые методы (как например method1() в примере) изменяют значения полей класса во время вызова. Есть ли какой-нибудь способ задавать дефолтные значения полям класса без изменения структуры класса?
Пример:
class TestingClass
{
private:
TestingClass(): _field1(0)
, _field2(0)
{
}
TestingClass(const TestingClass&){}
TestingClass & operator=(const TestingClass &){}
public:
static TestingClass Instance()
{
static TestingClass instance;
return instance;
}
void method1()
{
_field1 = 777;
}
void method2()
{
_field1 = 888;
}
void Show()
{
std::cout << "\nField1 - " << _field1
<< "\nField2 - " << _field2
<< "\n";
}
//other methods...
private:
int _field1;
int _field2;
};
Для гарантированной инициализации используете синглтон Майерса:
Foo& fooInstance(){
static Foo value (init_value);
return value;
}
Или так:
Foo& fooInstance(){
static Foo value = []{
Foo initValue;
initValue.setValue(42);
return initValue;
}();
return value;
}
В любом месте вызова этой функции будет возвращена корректная ссылка. В случае возможного многопоточного обращения сам класс Foo должен быть потокобезопасным, тогда и синглтон будет потокобезопасным (начиная с C++11).
P.S. В вашем коде достаточно инициализировать поля класса в конструкторе и возвращать в instаnce ссылку, а не копировать объект.
Как развивать веб-проекты в 2026 году: технологии, контент E-E-A-T и факторы доверия
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники