Я пытаюсь использовать массивы с 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 представлял размер массива, а не аргумент для конструктора А, как мне это сделать?
Это не работает, однако, если я удаляю конструктор 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);
}
Других решений пока нет …