在更改我的代码以使用唯一指针后,我偶然发现了如何将一组对象返回给客户端.通常,我想将对象作为引用或非拥有指针传递.但是,如果我有一个对象集合,我不能只返回它的引用.
作为一个例子,我有一个带有对象集合的简单类,它们都创建了一次,之后没有改变.
using ObjectUPtr = std::unique_ptr<Object>;
class MyClass
{
public:
const std::vector<Object*>& GetObjectsOldStyle() const
{
return mObjectsOldStyle;
}
const std::vector<VObjectUPtr>& GetObjectsNewStyleA() const
{
// I don't like that: The client should not see the unique_ptr ...
return mObjectsNewStyle;
}
std::vector<VObject*> GetObjectsNewStyleB() const
{
// Ok, but performance drops
std::transform(...); // Transform the collection and return a copy
}
const std::vector<VObject*>& GetObjectsNewStyleC() const
{
// Ok, only copied once, but two variables per collection needed
// Transform the collection and cache …Run Code Online (Sandbox Code Playgroud) 我有一个(希望)关于lambda表达式的简单问题:
#include <vector>
#include <algorithm>
//----------------------------------------------------------------
void DoSomething()
//----------------------------------------------------------------
{
std::vector<int> elements;
elements.push_back(1);
elements.push_back(2);
int ref = 1;
auto printhit = [=](int iSomeNumber)
{
if (ref == iSomeNumber)
{
printf("Hit: %d\n", iSomeNumber);
}
else
{
printf("No Hit: %d\n", iSomeNumber);
}
};
ref = 2;
std::for_each(elements.begin(), elements.end(), printhit);
}
Run Code Online (Sandbox Code Playgroud)
现在,我的问题是:当我使用capture [=]定义printhit时,它会打印"Hit:1".如果我通过引用[&]传递它,它会打印"Hit:2".我以某种方式预期,替换是在for_each中完成的,因此无论我如何授予对"ref"的访问权限,都会打印"Hit:2".
任何人都可以向我解释这个吗?
谢谢你,马库斯