//header file
void SetLogger(const std::shared_ptr<A>& log);
//cpp file
void SetLogger(const std::shared_ptr<A>& log)
{
std::shared_ptr<A>& mLog;
mLog = log;
}
Run Code Online (Sandbox Code Playgroud)
将shared_ptr作为函数参数传递的最佳方法是什么,以便所引用的对象的所有者船不会更改/不引用引用计数增加并且没有主体应该能够删除它接受所有者?
那么如何在函数中创建一个本地shared_ptr来说明上面的限制呢?
Caller:
SetLogger(A.get()); // A is actually a shared pointer
Header:
void SetLogger(const A& log);
CPP File:
void SetLogger(const A& log)
{
auto mLog = std::make_shared<A>(log);
}
Run Code Online (Sandbox Code Playgroud)
智能指针函数参数的经验法则是:如果没有所有权概念,请不要传递智能指针,传递指针对象
在情况1中,delete对参数的任何调用都将无法编译,这可能是可取的.const对论证的进一步限定是正交的.在你的例子中:
void SetLogger(const A& log);
Run Code Online (Sandbox Code Playgroud)
像这样叫
auto a = std::make_shared<A>(/* ... */);
SetLogger(*a);
Run Code Online (Sandbox Code Playgroud)
那么如何在函数中创建一个本地shared_ptr来说明上面的限制呢?
如果你需要复制论证,确实存在所有权概念.在这种情况下,请将您的功能签名更改为
void SetLogger(std::shared_ptr<A> log);
Run Code Online (Sandbox Code Playgroud)
但是,这将增加引用计数,但如果对象由a管理std::shared_ptr,则没有合理的解决方案来保留副本而不触及引用计数(有充分的理由,这就是类的内容).
| 归档时间: |
|
| 查看次数: |
160 次 |
| 最近记录: |