如下代码
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
既然不想負責資源的釋放,又想使用指標的特性,就只能使用智慧指標了,讓指標負責資源的釋放。至於使用
unique_ptr
還是shared_ptr
需要根據你的需求決定。如果一個物件只能由唯一的指標指向,即這個指標針對於它所指向的物件擁有所有權,則使用
unique_ptr
。如果一個物件可以被多個指標指向,則使用
shared_ptr
。換句話說,透過分配動態記憶體所獲得的物件實際上是一種資源,而指標則是存取這種資源的管道。當這種資源是獨佔資源時,就需要
unique_ptr
,當這種資源是可以分享的資源時,就使用shared_ptr
。unique_ptr
不能被拷貝,只能移動(move);而shared_ptr
可以被拷貝。一般能用unique_ptr
就不用shared_ptr
。返回unique_ptr