class My {
public:
auto create(size_t size)->void;
auto empty()->bool;
auto print()->void;
size_t size;
shared_ptr<int> arr;
};
auto My::create(size_t size)->void {
this->arr = make_shared<int>(new int[size]);
this->size = size;
};
Имеется небольшой класс для создания массива обернутого в shared_ptr, при запуске возникает ошибка : "Невозможно преобразовать int* в int", не могу понять почему
Дело в том, что make_shared
создаёт указатель на один объект, а параметры передаёт в конструктор. Т. е.
auto a = make_shared <int> (42);
это по сути представляет собой (хотя и немного эффективнее)
auto a = shared_ptr <int> (new int (42));
Похоже, что использовать для массивов его не удастся (что может быть вызвано различиями в выделении и освобождении памяти). Можно вместо массива использовать какой-нибудь класс, например, вектор.
make_shared
будет (скорее всего) поддерживать создание shared_ptr
, в котором хранится указатель на массив, со следующей версии C++. shared_ptr
поддерживает такое создание уже сегодня, но для этого нужно иметь последний компилятор, поддерживающий этот функционал (студия на момент написания ответа этого не умеет).
this->arr = std::shared_ptr<int[]>(new int[size]);
Объединю решения вопроса для удобства:
1) ассоциация
2) используя reset
this->arr.reset(new int[size], std::default_delete<int[]>());
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Виртуальный выделенный сервер (VDS) становится отличным выбором
Пытаюсь изменить значение текстового поля из другого потока, но почему-то не работает( Имеется класс MyThread:
Простой код с использованием MPIПри сборке в релиз отладка останавливается в указанном месте на ветке else
Написал вот такие две функции для нахождения длины строки и разбиение ее на лексемыКак можно еще оптимизировать данный код, не используя...
Я знаю, как компилировать программку в Sublime Text 3Надо просто нажать клавишу F7