Главная > Синтаксис C++, программирование > STL контейнеры и незавершенные типы.

STL контейнеры и незавершенные типы.

столкнулся с вопросом можно ли делать членами класса STL контейнеры незавершенных типов.

в общем случае создавать такие контейнеры нельзя, такой код не скомпилится:

class foo;
void f() {
std::vector[foo] b;
}

такой как минимум выругается что не может вызвать деструктор:

class bar {
public:
bar(){}
~bar(){}
private:
std::vector[foo] b;
};

а вот если написать
class bar {
public:
bar();
~bar();
private:
std::vector[foo] b;
};

то это уже может и сработать, если std::vector используется только внутри этого класса, главное чтобы там где определяются конструктор и деструктор bar, class foo уже был определен.
но формально это запрещенно, хоть компилеры и не ругаются на такое.

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

Добавить комментарий

Fill in your details below or click an icon to log in:

Логотип WordPress.com

You are commenting using your WordPress.com account. Log Out / Изменить )

Фотография Twitter

You are commenting using your Twitter account. Log Out / Изменить )

Фотография Facebook

You are commenting using your Facebook account. Log Out / Изменить )

Connecting to %s

Follow

Get every new post delivered to your Inbox.