c++ 返回对象问题
大家讲道理
大家讲道理 2017-04-17 13:26:13
0
2
400

如下代码

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

大家讲道理
大家讲道理

光阴似箭催人老,日月如移越少年。

全部回覆(2)
刘奇

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

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

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

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

伊谢尔伦

返回unique_ptr

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板