小编bad*_*oms的帖子

如何正确返回unique_ptr的集合

在更改我的代码以使用唯一指针后,我偶然发现了如何将一组对象返回给客户端.通常,我想将对象作为引用或非拥有指针传递.但是,如果我有一个对象集合,我不能只返回它的引用.

作为一个例子,我有一个带有对象集合的简单类,它们都创建了一次,之后没有改变.

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)

c++ vector unique-ptr c++11

17
推荐指数
2
解决办法
2019
查看次数

何时解析了C++ 11 lambda表达式中的变量引用?

我有一个(希望)关于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".

任何人都可以向我解释这个吗?

谢谢你,马库斯

c++ lambda c++11

2
推荐指数
1
解决办法
185
查看次数

标签 统计

c++ ×2

c++11 ×2

lambda ×1

unique-ptr ×1

vector ×1