返回一个emptyObject而不是对向量的引用

时间:2015-11-14 08:29:47

标签: c++ c++11 null smart-pointers return-type

给出两个A和B类,其中B的uinque_ptr为A!

class B {
    unique_ptr<A> a;
    B() {
    }
    ~B() {
    }
}

和A有一个方法返回自身的unique_ptr向量,如下所示:

   vector<unique_ptr<A>> const& A::getObjects() const {
        return this->myVector;
    }

现在我想在B中实现一个方法,它检查A的unique_ptr是否已存在,返回A中的向量,否则引用空向量或Null为错误:

 vector<unique_ptr<A>> const& B::getObjects()const{
    if (this->a.get()!=nullptr){
       return this->a->getObjects()
    }
   //ToDo an empty object or null
 }

我的问题是我可以在上面的功能中返回什么?返回nullptr会产生编译错误。返回以下代码:

矢量结果;     返回结果;

将引发警告:引用本地变量结果返回[-Wreturn-local-addr]

并返回{}(return {})再给我一个警告:

返回对临时[-Wreturn-local-addr]

的引用

所以我的问题是我可以在不发出警告或错误的情况下返回什么内容?

1 个答案:

答案 0 :(得分:2)

  

所以我的问题是我可以在不发出警告或错误的情况下返回什么内容?

您可以在函数中使用static vector<unique_ptr<A>> nullresult;,并在以下情况下返回该函数:

vector<unique_ptr<A>> const& B::getObjects()const{
    static vector<unique_ptr<A>> nullresult;
    if (this->a.get()!=nullptr){
        return this->a->getObjects()
    }
    return nullresult;
 }