size of динамического массива получить вообще невозможно, sizeof - операция компилятора, только во времени компиляции выполняется, а динамический массив (или другой объект) существует только во время выполнения программы
Ну по факту можно просто надо брать от типа * на размер
Это не динамический массив, и размер дин. массива таким образом не получить. Невозможно
А это чо https://godbolt.org/z/rYh14YKvb
Так size ты где взял ? Вот в этом и дело...
Ну, сотри эту переменную после выделения памяти, и попробуй снова получить размер массива.
А зачем ограничивать себя всякими условностями, если можно получать адекватно размер?
да хоть метод класса можно сделать чтоб получать размер template < typename T> size_t f() { return this->size * sizeof(T); } ?
В твоем случае вот такой код даст неверный размер массива: ssize_t size = 0; std::cin >> size; int *arr = new int[size]; std::cout << "Size arr: " << sizeof(arr) << std::endl; А вот такой даст верный: constexpr ssize_t size = 10; int arr[size]; std::cout << "Size arr: " << sizeof(arr) << std::endl;
всмысле не верный если size = 5 то 5 * int = размер всех элементов массива
Ага, надо за собой везде таскать size
За vla тут могут и по жопе и в жопу
Тамара, проспись. Где тут VLA?
Ну ты не понимаешь, о чём я. Я тебе говорю, что узнать размер выделенного динамически объекта невозможно, его нужно ХРАНИТЬ от момента выделения. А ты мне рассказываешь, как устроить класс для того, чтобы это хранить. Я знаю, что нужно хранить. Я тебе не об этом писал. А о том, что размер динамически выделенного объекта узнать после его создания невозможно.
вот узнал же https://godbolt.org/z/f3hTjaqPh
Обсуждают сегодня