C ++ unique_ptr и массивы

Я пытаюсь использовать массивы с unique_ptr безуспешно.
Как правильно объявить unique_ptr некоторого размера?
(размер какой-то параметр).

unique_ptr<A[]> ptr = make_unique<A[]>(size);

Вот пример:

#include <iostream>
#include <string>
#include <vector>
#include <functional>
#include <memory>

using namespace std;

class A {
string str;
public:
A(string _str): str(_str) {}
string getStr() {
return str;
}
};

int main()
{
unique_ptr<A[]> ptr = make_unique<A[]>(3);
}

Это не работает, однако, если я удаляю конструктор A, это работает.
Я хочу, чтобы 3 представлял размер массива, а не аргумент для конструктора А, как мне это сделать?

1

Решение

Это не работает, однако, если я удаляю конструктор A, он
работает.

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

std::make_unique<T[]> требует использования конструкторов по умолчанию …

Итак, предоставьте один, и все должно работать хорошо

#include <iostream>
#include <string>
#include <vector>
#include <functional>
#include <memory>

using namespace std;

class A {
string str;
public:
A() = default;
A(string _str): str(_str) {}
string getStr() {
return str;
}
};

int main()
{
unique_ptr<A[]> ptr = make_unique<A[]>(3);
}
1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector