gpt4 book ai didi

c++ - 在不创建新拷贝的情况下初始化成员变量

转载 作者:太空狗 更新时间:2023-10-29 20:42:40 25 4
gpt4 key购买 nike

我有一个类需要了解一些大型数据结构。因此,我创建了一个构造函数,它接受对该大型数据结构的引用,并使用它来初始化一个成员变量,如下所示:

 class Foo {
public:
BigStruct m_bigstruct;

Foo(BigStruct &inBigStruct) : m_bigstruct(inBigStruct) {}
};

这似乎复制了 inBigStruct,但我不想浪费这些资源,因为 BigStruct 非常庞大。是否有更标准的方法可以使 inBigStruct 的内容可供 Foo 使用而无需复制它?我知道我可以做到这一点:

 class Foo {
public:
BigStruct* m_bigstruct;

Foo(BigStruct* inBigStruct) : m_bigstruct(inBigStruct) {}
};

这是使 inBigStruct 可用于 Foo 而无需复制的常用方法吗?如果不是,那是什么?

最佳答案

C++2011 的方法是移动对象,例如:

Foo::Foo(BigStruct const& argument): m_bigstruct(argument) {}       // copies
Foo::Foo(BigStruct&& argument): m_bigstruct(std::move(argument)) {} // moves

当然,这假设 BigStruct 有一个合适的移动构造函数。根据传递的是临时对象(或通过 std::move() 看起来像临时对象的东西)还是左值,对象将被移动或复制:如果您有另一个对一个对象的引用对象,您通常不想窃取该对象,而是复制它。

关于c++ - 在不创建新拷贝的情况下初始化成员变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17891811/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com