小编mec*_*ahi的帖子

C++允许从类成员中移出数据的最佳方法是什么(std :: move语法)

想象一下,我有一个类,其主要职责是填充数据容器.我想将数据移出这个类.所以我有:

class cCreator
{  
public: 
   void generate()
   {
      ///generate the content of data_ and populate it
      ....
      ....
   }

   //variation 1
   std::vector<int>&& getData1()
   {
      return std::move(data_);
   }

   //variation 2
   std::vector<int> getData2()
   {
      return std::move(data_);    
   }
private:
      std::vector<int> data_
};
Run Code Online (Sandbox Code Playgroud)

S getData()的变体1和变体2之间有什么区别?当我从函数定义中省略&&时会发生什么变化?

move-semantics c++11

6
推荐指数
1
解决办法
227
查看次数

C++,从具有引用返回类型的函数返回什么以指示错误

想象一下,我们有一堂课

class cFoo {};
Run Code Online (Sandbox Code Playgroud)

另一个带有cFoo对象的向量,如下所示:

class cContainer
    {
        public:
            const cFoo& getFoo(std::size_t index) const;
        private:
            std::vector<cFoo> fooList_;
    }
    const fCoo& cContainer::getfoo(std::size_t index) const
    {
        if(index < fooList_.size())
            return fooList_[index];
        else
            ??????????
    };
Run Code Online (Sandbox Code Playgroud)

所以我的问题是"在这种情况下最佳做法是什么?".这是在其他部分代替????之后放的东西.此问题对于返回引用的任何成员函数(无论是否为const)都有效.当我们没有任何东西可以返回时,应该返回什么?

显然返回一个本地临时变量是不可能的.我想到的另一个解决方案是cFoo()cFoo类定义/实现期间返回最可能定义和初始化的静态实例.

当然,在这种情况下,我们可以避免返回引用,但它可能是性能差的选择(特别是如果我们缺少像move运算符这样的好东西).

c++

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

为什么构造函数调用的数量与析构函数调用的数量不匹配?

我对下面这段代码感到很困惑.

#include <iostream>

class mobject
{
public:
    mobject(){ std::cout << "mobject ctor\n"; }
    ~mobject(){ std::cout << "mobject dtor\n"; }
};

mobject giveme() { return mobject(); }
void func2(const mobject& p) { mobject g = p; }
void func1(const mobject& p) { func2(p); }
int main()
{
    func1(giveme());
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

它给了我以下输出:

mobject ctor
mobject dtor
mobject dtor

我用gcc 5.4.0和`"g ++ -g temp.cpp"编译了代码.我主要担心的是第二个调用mobjects的析构函数.这看起来是错误的,因为我们第二次打电话给dtor.valgrind告诉我这个没有问题,但我仍感到困惑.

c++

0
推荐指数
1
解决办法
87
查看次数

标签 统计

c++ ×2

c++11 ×1

move-semantics ×1