我已经开始使用std::unique_ptr
例如:
unique_ptr<TFile> myfile( TFile::Open("myfile.root") );
代替
TFile * myoldfile = TFile::Open("myoldfile.root") ;
现在我不确定我的功能应该是什么样子。我认为问题的一部分可能是我的代码还不够复杂,还不足以让任何问题变得明显,但我想现在就得到它,这样当事情变得更复杂时,我就不会陷入混乱。
我曾经有:
double interestingResult( TFile * input )
{...}
(它实际上并没有修改 TFile 但不能是 const,因为它调用了 TFile 的一些非常量函数)。
我仍然可以这样做:
myResult = interestingResult( myfile.get() );
这似乎不是很用户友好。(我认为这里建议:https ://stackoverflow.com/a/5325560/1527126 。)
或者我可以修改我的函数看起来像:
double interestingResult( unique_ptr<TFile>& input )
{...}
这会强制用户始终使用 unique_ptr。
或者我可以通过以下方式支持两者:
double interestingResult( unique_ptr<TFile>& input )
{ return interestingResult( intput.get() ); }
但我在其他人的代码中看不到这一点。
这种情况的标准方法是什么?
我认为这个答案(https://stackoverflow.com/a/9700189/1527126)暗示我应该接受引用,因为我不希望myfile
为空。但是库函数TFile::Open
总是返回一个指针,因此能够将它直接传递给函数而不需要额外的解引用似乎很自然。
抱歉 ps 我放弃了尝试确定是否应该在 StackOverflow 或 CodeReview 上询问,但如果不是,请指出适当的位置。