Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/164.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 返回emptyObject而不是对向量的引用_C++_C++11_Null_Smart Pointers_Return Type - Fatal编程技术网

C++ 返回emptyObject而不是对向量的引用

C++ 返回emptyObject而不是对向量的引用,c++,c++11,null,smart-pointers,return-type,C++,C++11,Null,Smart Pointers,Return Type,给出了两个类A和B,其中B的单位为A class B { unique_ptr<A> a; B() { } ~B() { } } B类{ 独特的ptr a; B(){ } ~B(){ } } A具有如下返回其自身的唯一_ptr向量的方法: vector<unique_ptr<A>> const& A::getObjects() const { return this->myVect

给出了两个类A和B,其中B的单位为A

class B {
    unique_ptr<A> a;
    B() {
    }
    ~B() {
    }
}
B类{
独特的ptr a;
B(){
}
~B(){
}
}
A具有如下返回其自身的唯一_ptr向量的方法:

   vector<unique_ptr<A>> const& A::getObjects() const {
        return this->myVector;
    }
向量常量&A::getObjects()常量{ 返回此->myVector; } 现在我想在B中实现一个方法,该方法检查a的唯一_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
 }
向量常量&B::getObjects()常量{ 如果(this->a.get()!=nullptr){ 返回此->a->getObjects() } //ToDo空对象或null } 我的问题是我可以在上面的函数中返回什么?返回null ptr会导致编译错误。返回以下代码:

矢量结果; 返回结果

将导致警告:返回对局部变量结果的引用
[-Wreturn local addr]

返回{}(返回{})给我另一个警告:

返回对临时[-Wreturn local addr]的引用

所以我的问题是,我能返回什么而不给出警告或错误

所以我的问题是,我能返回什么而不给出警告或错误

您可以有一个
静态向量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;
 }
向量常量&B::getObjects()常量{ 静态矢量结果; 如果(this->a.get()!=nullptr){ 返回此->a->getObjects() } 返回结果; }
谢谢!我搜索了一下。我认为抛出异常比使用静态向量更好。@Govan当然,这是另一种选择。我刚才回答了你具体的问题。