Пытаюсь получить доступ к элементу массива через его указатель, объявленный как shared_ptr
так:
#include <iostream>
#include <memory>
using namespace std;
int main()
{
{
shared_ptr<int> up(new int[5] {1,2,3,4,5});
cout << up[3];
}
getchar();
return 0;
}
Однако во время компиляции выдаётся ошибка о том, что "отсутствует оператор []
, соответствующий этим операндам".
Я прочитал на cppreference и в подсказка среды разработки, что оператор []
у shared_ptr
принимает тип ptrdiff_t
, однако так:
#include <iostream>
#include <memory>
using namespace std;
int main()
{
{
shared_ptr<int> up(new int[5] {1,2,3,4,5});
cout << up[static_cast<ptrdiff_t>(3)];
}
getchar();
return 0;
}
тоже не работает с той же ошибкой.
Вопрос: как всё-таки правильно пользоваться этим оператором и что я делаю не так?
Первая Ваша ошибка - попытка инициализировать std::shared_ptr<int>
массивом, выделенным через new int[]
. Это некорректно, так как shared_ptr<T>
вызывает delete
при освобождении памяти, а не требуемый delete[]
.
Замена int
на int[]
решает эту проблему и Вашу - умный указатель понимает, что на самом деле содержит в себе массив и позволяет его индексировать.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Считается хорошим тоном обеспечивать noexcept-swap функцию-член классаЧто делать, если появляется необходимость добавить в этой функции такую...
У меня есть часть кода, в которой должна создаваться папка на диске С: