【发布时间】:2019-10-29 17:36:17
【问题描述】:
我正在阅读很多关于 C++ 优化的不同内容,但我很困惑。我会很感激一些帮助。基本上,当我将向量和结构作为参数传递或返回向量和结构时,我想弄清楚是否需要指针。
假设我有一个包含 2 个元素的结构:一个 int,然后是一个整数向量。我将在函数中本地创建这个结构,然后返回它。这个函数会被多次调用,每次都会生成一个新的结构体。我想保留在类成员中创建的最后一个结构(例如 lastStruct_)。因此,在返回结构之前,我可以以某种方式更新 lastStruct_。
现在,最好的方法是什么,知道结构中的向量可能非常大(需要避免复制)。结构中的向量是否需要是指针?如果我想通过创建 get_lastStruct() 方法将 lastStruct_ 共享给其他类,我应该返回对 lastStruct_ 的引用、指针还是不关心它? lastStruct_ 应该是共享指针吗?
这让我很困惑,因为显然 C++ 知道如何避免复制,但我也看到很多人建议使用指针,而其他人则说指向向量的指针根本没有意义。
struct MyStruct {
std::vector<int> pixels;
int foo;
}
class MyClass {
MyStruct lastStruct_;
public:
MyStruct create_struct();
MyStruct getLastStruct();
}
MyClass::create_struct()
{
MyStruct s = {std::vector<int>(100, 1), 1234};
lastStruct_ = s;
return s;
}
MyClass::getLastStruct()
{
return lastStruct_;
}
【问题讨论】:
-
所以它取决于 C++ 的版本,任何比 C++11 更新的东西都应该做 RVO。较新的版本甚至可以保证复制省略。
-
“很多人推荐使用指针”。他们只是还没有收到备忘录。
-
所以我的理解是结构中的向量应该是一个普通的向量。该结构应正常返回(返回 the_struct)。属性 lastStruct_ 应该是一个普通的结构。我会用正常的分配更新lastStruct_ = the_struct。最后,当我通过 getter 分享这个 lastStruct_ 时,我会简单地返回 lastStruct_ ?真的那么简单吗(C++>11真的那么好吗?