搜尋

首頁  >  問答  >  主體

c++ 返回对象问题

如下代码

submatch foo(...){
    if (rc > 0){
        submatch sm(Str, ovector,rc);
        return sm;
    }
    else {
        return nullptr;
    }

然而这个语句不能成立,因为函数返回的签名不是指针,不能用nullptr

但我又不希望用指针,因为用了指针,调用这要负责delete,这是不希望的

我希望C++能和python类似,如果异常返回None,类似nullptr,
调用着也不需要关心delete对象的问题

auto m = foo();
if (m 不是null) {
   操作m
}

无需delete m

大家讲道理大家讲道理2803 天前387

全部回覆(2)我來回復

  • 怪我咯

    怪我咯2017-04-17 13:28:13

    既然不想負責資源的釋放,又想使用指標的特性,就只能使用智慧指標了,讓指標負責資源的釋放。至於使用unique_ptr還是shared_ptr需要根據你的需求決定。

    • 如果一個物件只能由唯一的指標指向,即這個指標針對於它所指向的物件擁有所有權,則使用unique_ptr

    • 如果一個物件可以被多個指標指向,則使用shared_ptr

    換句話說,透過分配動態記憶體所獲得的物件實際上是一種資源,而指標則是存取這種資源的管道。當這種資源是獨佔資源時,就需要unique_ptr,當這種資源是可以分享的資源時,就使用shared_ptrunique_ptr不能被拷貝,只能移動(move);而shared_ptr可以被拷貝。一般能用unique_ptr就不用shared_ptr

    回覆
    0
  • 伊谢尔伦

    伊谢尔伦2017-04-17 13:28:13

    返回unique_ptr

    回覆
    0
  • 取消回覆