在C ++中,如果我从函数返回共享/唯一ptr,它是否按值返回?即
shared_ptr<CLASS> function_f(){
auto p = make_shared<CLASS>(5);
return p;
}
那会发生什么?指针内部是否动态分配?如果我返回这个,我有2个指针指向同一个东西吗?
答案 0 :(得分:4)
shared_ptr
本身是按值返回的。它指向的CLASS
对象是动态分配的,因此不会被复制。
你可能会在同一个对象上短暂地拥有两个shared_ptr
(RVO除外,所以在实践中你可能已经赢了),但是通过设计shared_ptr
类,这不是一个问题。