避免在 C++ 初始化期间复制变量带块

发布于 10-18 00:58 字数 672 浏览 5 评论 0原文

请看一下这段代码。 C++Clangblock 功能。 这段代码可以避免复制吗?请让我知道您的意见。 这只是避免堆的一种做法。

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.
    }
};

Please look this code. C++ with Clang's block feature.
Can this code avoid copying? Please let me know your opinion.
This is just a practice of avoiding heap.

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.
    }
};

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

陈甜2024-10-25 00:58:09

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

class   World
{
    public:

    Element& a;
    Element& b;

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

    ...
};

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

The only way to totally avoid copying is to use a pointer or reference. For example:

class   World
{
    public:

    Element& a;
    Element& b;

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

    ...
};

As with any other reference or pointer, this approach requires that the variables passed not go out of scope.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文