在使用块的C ++中初始化期间避免复制变量

时间:2011-02-18 07:38:10

标签: c++ initialization copy block clang

请查看此代码。具有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 个答案:

答案 0 :(得分:3)

完全避免复制的唯一方法是使用指针或引用。例如:

class   World
{
    public:

    Element& a;
    Element& b;

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

    ...
};

与任何其他引用或指针一样,此方法要求传递的变量不会超出范围。