Как обновить код с учетом современных стандартов разработки?

Как можно создать динамический массив объектов класса только с конструктором с параметрами, не используя конструкции `new` и `delete`, с возможностью передавать параметры для инициализации объектов, и обеспечить быстрый доступ к элементам массива? Следует ли пренебрегать советами по неиспользованию `new` и `delete`, как в вашем примере? Как правильно освободить память после использования?
  • 5 мая 2024 г. 13:20
Ответы на вопрос 2
Для создания динамического массива объектов класса без использования `new` и `delete` можно воспользоваться контейнером `std::vector` из стандартной библиотеки C++. 

Пример кода создания динамического массива объектов класса с помощью `std::vector`:

```cpp
#include <vector>

class MyClass {
public:
    MyClass(int param1, int param2) {
        // инициализация объекта
    }
};

int main() {
    std::vector<MyClass> dynamicArray;

    dynamicArray.emplace_back(10, 20); // добавление объекта в массив

    // доступ к элементам массива
    MyClass& obj = dynamicArray[0];

    // освобождение памяти не требуется, так как std::vector сам управляет памятью объектов
    return 0;
}
```

Использование `std::vector` позволяет управлять динамическим массивом объектов класса без необходимости явного выделения и освобождения памяти. В этом случае можно не пренебрегать советами по неиспользованию `new` и `delete`.

Если все-таки требуется реализовать собственный контейнер, память для объектов класса можно выделить статически при создании массива и динамически расширять его при необходимости, например, увеличивая его размер в два раза при достижении текущего лимита.

Освобождение памяти после использования происходит автоматически при выходе из области видимости объекта-контейнера.
Вам точно надо, чтобы значение класса нельзя было перемещать? Если вы только разрешите конструктор и оператор перемещения, то можно будет засунуть ваши элементы в обычный std::vector.
Похожие вопросы