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

如下代码

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

いいねを押す +0
伊谢尔伦

返回unique_ptr

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート