Как я могу использовать операторы для элементов массива объектов? - PullRequest
0 голосов
/ 22 апреля 2020

Моя главная проблема - я хочу проверить, пуст ли элемент этого списка объектов или нет.

Если я использую это, я не получаю никаких ошибок.

class A;
A *pointer = new A;
pointer = NULL;

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

    class A;
A* pointer = new A[2];
pointer[0] = NULL;

Ошибка: нет оператора "=" соответствует этим операндам. Я тоже не могу использовать

 if(!ptr[0])

.

Ответы [ 3 ]

0 голосов
/ 22 апреля 2020

Создайте массив указателей на объект, как этот

A* pointer[2];

затем

 pointer[0] = new A();
pointer[0]=nullptr;
 if(!pointer[0])
0 голосов
/ 22 апреля 2020

После прочтения большинства комментариев я все еще не уверен на 100%, что вы хотите. Если вы ищете список объектов, где каждый объект может присутствовать или нет, вы можете использовать массивы указателей, но это немного страшно в современном C ++. Альтернативой может быть вектор std::optional

// create vector with 2 empty elements
std::vector<std::optional<A>> a(2);
// if a[0] is empty create one
if(!a[0])
    a[0] = A();
//or set to null
a[0] = std::nullopt;

Каждый элемент может иметь значение или нет, и вам не нужно возиться с указателями. Альтернативой может быть вектор std::uniqe_ptr

// create vector with 2 empty elements
std::vector<std::unique_ptr<A>> a(2);
// if a[0] is empty create one
if(!a[0])
    a[0].reset(new A());
// or set it to null 
a[0] = nullptr;

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

0 голосов
/ 22 апреля 2020

Для вашей проблемы это можно сделать

A* ptr[10] = {new A} // notice the [] after ptr

Все остальные индексы в ptr автоматически получат nullptr. Однако вы также можете сделать

ptr[2] = nullptr;
ptr[3] = new A;

и конечно

if(ptr[4] == nullptr){/*Your stuff*/}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...