![]() |
1
3
AS SBI 说,“这取决于函数的作用。” 但是,我认为上面最重要的一点不是是否允许空值,而是函数是否存储一个指向对象的指针以供以后使用。如果函数只填充了一些数据,那么出于以下原因,我将使用引用:
如果函数需要存储指针以备日后使用,或者您预计函数可能会发生变化,从而需要存储指针,那么请使用共享指针。 |
![]() |
2
3
这取决于函数的作用。
通常,接受指针的函数表示调用方可能调用此函数,即使它们没有要传递给它的对象-它们总是可以传递
将非常量引用作为参数的函数应传递可能更改的有效对象。调用方不能(合法地)调用该函数,除非他们有一个有效的对象,并且除非他们愿意让该函数更改对象的状态,否则不会调用该函数。如果这更符合函数的规范,请使用引用。 |
![]() |
3
1
如果必须接收有效的对象(即不希望调用方传递空值),那么无论如何,不要使用boost::shared_ptr。第二个示例传递对“智能指针”的引用….忽略细节,它是一个“指向汽车指针的指针”。因为它是引用,所以共享的指针对象不能为空….但这并不意味着它不能有空值(即指向“空”对象)。 我不明白为什么你会认为对智能指针的引用会“更好”—调用函数已经使用智能指针了吗? 至于“const”的含义……你的意思是像
? 如果是的话,这将适得其反,你要向编译器传达这样一个事实:“汽车”不会改变(但你可能希望它改变!). 或者你的意思是让函数“const”,类似于
? 在后一种情况下,您通知编译器/API用户“loadcar”方法不会修改DAL对象。如果这是真的,那么这样做是一个好主意——不仅它支持一些编译器优化,而且通常在“契约”(函数签名)中指定函数不修改DAL是一件好事,特别是如果在代码中进行这种隐式假设(这样可以确保这一点保持不变,并且未来没有人会以改变“dal”对象的方式修改“loadcar”功能) |
![]() |
4
0
在第一种情况下,您只需通过一辆车,并“填充它”的信息。例如,您可以创建一辆“默认”汽车,然后将其加满。我看到其中一个不便之处:拥有两类汽车并不太难:一类是糟糕的、默认的、无用的、“空”的汽车,另一类是真正的从功能中获得的汽车。对我来说,一辆车就是一辆车,所以它应该是一辆有效的车(例如,我可以从A点开到B点;我可以加速、制动、启动、停止)在你的功能前后。 我通常使用传统的指针,而不是Boost(顺便说一句,没有问题),所以我真的不能对后一种选择发表评论。 |
![]() |
Fishie · 作为类成员的智能指针是否仍然自动释放?[关闭] 4 月前 |
![]() |
SpeakX · 多线程上下文中的弱指针未过期时更新 1 年前 |
|
Vincent31 · 对象上的C++共享指针多次调用析构函数 1 年前 |