У меня есть класс с std::vector const&
членом, который должен быть установлен через конструктор.Однако также должна быть возможность пропустить этот параметр в конструкторе и позволить элементу инициализироваться значением по умолчанию.
Пример кода:
class MyClass {
public:
MyClass(int a, const std::vector<int> &v = {42,42,42}) : vec(v){}
const std::vector<int> &vec;
};
int main(void) {
std::vector<int> a{1,2,3};
MyClass c1(1,a); // c1.vec = 1,2,3
MyClass c2(1); // c2.vec = randomStuff
// should actually be 42,42,42
}
Если я изменю инициализацию на:
MyClass(int a, const std::vector<int> &v = *(new std::vector<int>{42,42,42})) : vec(v){}
Все отлично работает, так как временный вектор не удаляется при выходе из области видимости.Тем не менее, это не правильно и выглядит утечка памяти.Есть ли более разумный способ достичь ожидаемого поведения?