Создает ли новое ключевое слово considring элементы внутри класса, которые инициализируются конструктором по умолчанию, также с новым ключевым словом в C ++? - PullRequest
0 голосов
/ 12 октября 2019

Инициализация класса, члены которого динамически распределяются. Может ли новое ключевое слово выделять весь блок памяти с учетом членов, которые также будут инициализированы внутри класса конструктором по умолчанию?

Должен ли я заботиться о том, где эти члены размещаются в памяти (разбросаны или собраны вместе))? Я работаю с огромными массивами вершин в рекурсивном алгоритме, который выполняет адаптивное уточнение сетки на основе некоторых критериев ошибок. И мне нужно обойти эти массивы для выполнения других операций, поэтому мне нужна производительность.

Кроме того, как связанная тема. Является ли один из двух способов, используемых ниже, чтобы объявить класс внутри основной функции предпочтительным с точки зрения производительности?

Не могли бы вы порекомендовать мне какую-нибудь книгу / статью / веб-страницу на эту тему?

Примеригрушечный код, который суммирует проблему:

class Octree {

    vec3* Vertex;
    vec3* Cell_Centers;

    public:

    Octree(unsigned population_to_allocate) //constructor
    {
        Vertex = new vec3[population_to_allocate*8];
        Cell_Centers = new vec3[population_to_allocate];
    }

int main()
{
    unsigned population_to_allocate = 3000;
    Octree* newOctree = new Octree(population_to_allocate);
    Octree stackOctree(population_to_allocate);
}

1 Ответ

0 голосов
/ 12 октября 2019

Учитывая, что вы сказали, что число Octree не больше семи, а population_to_allocate в тысячах, самое простое, что вы можете сделать, это изменить значение с vec3* на std::vector<vec3>. Тогда ваш конструктор будет выглядеть так:

Octree(unsigned population_to_allocate) //constructor
    : Vertex(population_to_allocate)
    , Cell_Centers(population_to_allocate)
{
}

Не используя new, вы легко избежите утечек памяти и ошибок. И нет никаких причин усложнять вещи, кроме этого, потому что у вас есть только несколько Octree экземпляров.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...