Будет ли класс вызывать свой конструктор, когда помещается в std :: vector? - PullRequest
0 голосов
/ 02 июля 2010

если я, например, сделаю:

FOO foo;
foovect.push_back(foo);

где FOO - это класс с конструктором по умолчанию.

Будет ли конструктор вызываться только тогда, когда foo помещается в стек, илион вызывается снова, когда помещается в std :: vector?

Спасибо

Я делаю:

OGLSHAPE::OGLSHAPE(void)
{
    glGenBuffersARB(GL_ARRAY_BUFFER_ARB,&ObjectVBOInt);

}

Ответы [ 3 ]

3 голосов
/ 02 июля 2010

FOO foo; вызовет конструктор.
foovect.push_back(foo); вызовет конструктор копирования.

#include <iostream>
#include <vector>

class FOO
{
public:
    FOO()
    {
        std::cout << "Constructor" << std::endl;
    }
    FOO(const FOO& _f)
    {
        std::cout << "Copy Constructor" << std::endl;
    }
};

int main()
{
    FOO foo;
    std::vector<FOO> foovect;
    foovect.push_back(foo);
}

Вывод для этого:
Constructor
Copy Constructor

3 голосов
/ 02 июля 2010

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

FOO( const FOO & f );

Конструктор копирования по умолчанию предоставляется компилятором, если вы сами его не предоставляете.

0 голосов
/ 02 июля 2010

Когда вы выполняете push_back, ваш объект копируется в вектор.Это означает, что вызывается конструктор копирования для вашего объекта.Все стандартные контейнеры библиотеки работают с копиями объектов, а не с самими объектами.Если вам нужно такое поведение, вам нужно прибегнуть к использованию указателей.

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