|
Аллокация в конструктора массива
|
|||
---|---|---|---|
#18+
Здравствуйте - вопрос такой Есть класс Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9.
Как мне в конструкторе выделить память в размере capacity для массива array ? (Массив нужен именно на стеке) ... |
|||
:
Нравится:
Не нравится:
|
|||
23.10.2021, 16:14 |
|
Аллокация в конструктора массива
|
|||
---|---|---|---|
#18+
indigodye0, А зачем??? Чтобы деструктор не писать? Возьми какой-нибудь стандартный контейнер (vector например) вместо примитивного массива и сможешь задать ему размер в конструкторе класса, а деструктор контейнера отработает автоматически когда элемент твоего класса "лежащий на стеке" умрет. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.10.2021, 16:21 |
|
Аллокация в конструктора массива
|
|||
---|---|---|---|
#18+
White Owl indigodye0, А зачем??? Чтобы деструктор не писать? Возьми какой-нибудь стандартный контейнер (vector например) вместо примитивного массива и сможешь задать ему размер в конструкторе класса, а деструктор контейнера отработает автоматически когда элемент твоего класса "лежащий на стеке" умрет. Вопрос позвольяет ли так сделать С++ ? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.10.2021, 16:22 |
|
Аллокация в конструктора массива
|
|||
---|---|---|---|
#18+
Самое простое - перековать в темплейт. Тогда получится ещё один std::array. Чуть посложнее - использовать calloc(). Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
23.10.2021, 16:24 |
|
Аллокация в конструктора массива
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov Чуть посложнее - использовать calloc(). А как это будет выглядеть ? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.10.2021, 16:24 |
|
Аллокация в конструктора массива
|
|||
---|---|---|---|
#18+
indigodye0 White Owl indigodye0, А зачем??? Чтобы деструктор не писать? Возьми какой-нибудь стандартный контейнер (vector например) вместо примитивного массива и сможешь задать ему размер в конструкторе класса, а деструктор контейнера отработает автоматически когда элемент твоего класса "лежащий на стеке" умрет. Вопрос позвольяет ли так сделать С++ ? Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8.
И все. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.10.2021, 16:25 |
|
Аллокация в конструктора массива
|
|||
---|---|---|---|
#18+
White Owl indigodye0 пропущено... Вопрос позвольяет ли так сделать С++ ? Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8.
И все. Нет не все Это ответ на какой то другой вопрос ... |
|||
:
Нравится:
Не нравится:
|
|||
23.10.2021, 16:30 |
|
Аллокация в конструктора массива
|
|||
---|---|---|---|
#18+
Самый главный вопрос тут А сколько вообще памяти будет выделено в приведенном выше коде ? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.10.2021, 16:40 |
|
Аллокация в конструктора массива
|
|||
---|---|---|---|
#18+
indigodye0 Самый главный вопрос тут А сколько вообще памяти будет выделено в приведенном выше коде ? sizeof(Pointer) будет лежать на стеке а sizeof(uint64_t)*capacity ляжет там куда конструктор vector ее положит. На малых размерах оно может и на стеке лежать, на больших в кучу пойдет. Зависит от имплементации. Что тебе конкретно нужно то? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.10.2021, 16:57 |
|
Аллокация в конструктора массива
|
|||
---|---|---|---|
#18+
White Owl indigodye0 Самый главный вопрос тут А сколько вообще памяти будет выделено в приведенном выше коде ? sizeof(Pointer) будет лежать на стеке а sizeof(uint64_t)*capacity ляжет там куда конструктор vector ее положит. На малых размерах оно может и на стеке лежать, на больших в кучу пойдет. Зависит от имплементации. Что тебе конкретно нужно то? Не в векторе а в моем исходном коде uint64_t array[]; Сколько тут выделится памяти ? Нисколько ? А в чем тогда смысл такого объявления ? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.10.2021, 16:58 |
|
Аллокация в конструктора массива
|
|||
---|---|---|---|
#18+
---На малых размерах оно может и на стеке лежать А как мне без внешних коллекций все на стек положить Вектор то это как то делает ... |
|||
:
Нравится:
Не нравится:
|
|||
23.10.2021, 17:08 |
|
Аллокация в конструктора массива
|
|||
---|---|---|---|
#18+
indigodye0 Не в векторе а в моем исходном коде uint64_t array[]; Сколько тут выделится памяти ? Нисколько ? А в чем тогда смысл такого объявления ? Смысл? Ну скорее всего это может быть "напоминанием" для человека что данный член класса это массив. И его надо объявлять/уничтожать через new[]/delete[]. Практически ничем не отличается в работе от указателя. Еще это может быть попыткой повторить прием с простого С. Там так можно делать массивы переменной длины внутри структур. Код: plaintext 1. 2. 3. 4. 5.
Но для С++ класса это работать не будет. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.10.2021, 17:11 |
|
Аллокация в конструктора массива
|
|||
---|---|---|---|
#18+
White Owl uint64_t array[]; White Owl И его надо объявлять/уничтожать через new[]/delete[]] uint64_t array[]; как поле внутри С++ класса можно объявлять/уничтожать через new[]/delete[]] ? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.10.2021, 17:14 |
|
Аллокация в конструктора массива
|
|||
---|---|---|---|
#18+
indigodye0 ---На малых размерах оно может и на стеке лежать А как мне без внешних коллекций все на стек положить Вектор то это как то делает Все на стек положить нельзя. Не в случае классов. Да и не нужно это практически никогда. Если тебе сильно хочется именно на стек - ты что-то делаешь не правильно. Выделять на стеке или в куче можно примерно так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30.
... |
|||
:
Нравится:
Не нравится:
|
|||
23.10.2021, 17:29 |
|
Аллокация в конструктора массива
|
|||
---|---|---|---|
#18+
indigodye0А как это будет выглядеть ? Вызов функции в языке программирования всегда выглядит как вызов функции. Что тебе неясно после прочтения описания этой функции? Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
23.10.2021, 17:33 |
|
Аллокация в конструктора массива
|
|||
---|---|---|---|
#18+
Код: plaintext 1. 2. 3.
Работать не будет вроде ? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.10.2021, 17:57 |
|
Аллокация в конструктора массива
|
|||
---|---|---|---|
#18+
Используй std::array, он на стэке создается. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.10.2021, 18:00 |
|
Аллокация в конструктора массива
|
|||
---|---|---|---|
#18+
Dima T Используй std::array, он на стэке создается. Он щаблонный ... |
|||
:
Нравится:
Не нравится:
|
|||
23.10.2021, 18:00 |
|
Аллокация в конструктора массива
|
|||
---|---|---|---|
#18+
В конструкторе выделить память на стеке? Теоретически конечно можно, но зачем? Все, что выделено на стеке, будет освобождено в момент завершения функции - в данном случае в момент завершения конструктора... ... |
|||
:
Нравится:
Не нравится:
|
|||
23.10.2021, 18:16 |
|
Аллокация в конструктора массива
|
|||
---|---|---|---|
#18+
Barlone В конструкторе выделить память на стеке? Теоретически конечно можно, но зачем? Все, что выделено на стеке, будет освобождено в момент завершения функции - в данном случае в момент завершения конструктора... Нет uint64_t array[]; Будет жить и после завершения конструктора ... |
|||
:
Нравится:
Не нравится:
|
|||
23.10.2021, 18:17 |
|
Аллокация в конструктора массива
|
|||
---|---|---|---|
#18+
В данном случае всё, что тебе нужно, это Код: sql 1.
Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
23.10.2021, 18:22 |
|
Аллокация в конструктора массива
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov В данном случае всё, что тебе нужно, это Код: sql 1.
И как в качестве n передать capacity из параметра конструктора ? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.10.2021, 18:23 |
|
Аллокация в конструктора массива
|
|||
---|---|---|---|
#18+
indigodye0И как в качестве n передать capacity из параметра конструктора ? Выкинуть конструктор. Вместе с классом. Просто написать эту строчку там, где тебе нужен массив в стеке. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
23.10.2021, 18:28 |
|
Аллокация в конструктора массива
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov indigodye0И как в качестве n передать capacity из параметра конструктора ? Выкинуть конструктор. Вместе с классом. Просто написать эту строчку там, где тебе нужен массив в стеке. Ну короче в конструкоре никак. ясно ... |
|||
:
Нравится:
Не нравится:
|
|||
23.10.2021, 18:29 |
|
|
Start [/forum/topic.php?fid=57&msg=40106349&tid=2017160]: |
0ms |
get settings: |
17ms |
get forum list: |
18ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
36ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
596ms |
get tp. blocked users: |
1ms |
others: | 317ms |
total: | 1009ms |
0 / 0 |