- 处理原始内存或者
- 可能需要返回null或者
- 处理从new()返回的新分配的对象。
第一个原因实际上无法处理。这是任务的固有特性。 第二个原因可以通过Null对象模式处理,并返回对该Null对象的引用。这要求您定义每个要能够引用为Null的类实例的Null对象。 第三个原因可以使用智能指针处理。
我的疑问是:是否可能在完全不考虑指针的情况下“用Java方式编写C ++”并使用引用进行编程?是否可能像Java一样在C ++中按语言定义一个null对象?
如果问题陈述不清或是FAQ,请谅解,我对C ++很生疏,必须开始一项新的项目学习一些新东西,并适应不同的思考方式。
boost::optional
来实现。 - Benjamin Lindleystd::shared_ptr<Foo> myfoo(new Foo);
,我的代码中没有指针类型,但当然有一个带有指针类型的子表达式。如果我们从shared_ptr
中去掉operator->
,只使用operator*
,那么我们可以使用智能指针而不必直接使用指针,因此除了在第一次创建它们时,我们不需要“使用指针”来使用智能指针。这是一种品味问题,你是否认为这是“不使用原始指针”,但正如Kerrek所说,你并没有明确地使用它们。 - Steve JessopT&
类似于C#中的ref T
,而不是C#中的类引用。如果想要类似于C#引用的东西,请使用智能指针,例如std::shared_ptr<T>
或std::unique_ptr<T>
,具体取决于所需的所有权语义。 - fredoverflow