Как избежать копирования переменных во время инициализации в C ++ с помощью блока - PullRequest
1 голос
/ 18 февраля 2011

Пожалуйста, посмотрите этот код. C++ с функцией Clang block. Может ли этот код избежать копирования? Пожалуйста, дайте мне знать ваше мнение. Это просто практика избегания кучи.

class   Element
{
    public:

    int value[1024];    //  Here is a large entity.

    Element()
    {
    }
};
class   World
{
    public:

    Element a;
    Element b;

    inline World(Element& newA, Element& newB) 
    {
        a   =   newA;   //  Source of newA is stored in somewhere, this copies whole Element during assignment.
        b   =   newB;
    }
    inline World(void(^init)(Element& a, Element& b)) 
    {
        init(a, b);     //  Assignment is done without copying whole Element.
    }
};

1 Ответ

3 голосов
/ 18 февраля 2011

Единственный способ полностью избежать копирования - использовать указатель или ссылку. Например:

class   World
{
    public:

    Element& a;
    Element& b;

    inline World(Element& newA, Element& newB) : a(newA), b(newB)
    {
    }

    ...
};

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

...