C++ 始终使用指针而不是引用,以便在需要时轻松转换为智能指针,这是否可以接受?

C++ 始终使用指针而不是引用,以便在需要时轻松转换为智能指针,这是否可以接受?,c++,C++,我知道引用比指针更受欢迎,但在需要时将所有这些“.”改为“->”是非常乏味的。因此,始终使用指针而不是引用,以便在需要时轻松地将它们转换为智能指针,这是一种可接受的做法吗?或者有什么方法可以快速将引用更改为指针?使用引用的目的是让事情变得稍微容易一些,因为您可以像使用常规的非指针变量一样使用它们 但如果不容易,甚至更难,我认为绝对没有理由使用它们 使用指针没有什么错。更改体系结构只是为了方便在源代码中替换文本 否,这永远不是有效的设计决策。正如Luchian所解释的,这似乎不是一个真正存在的考虑

我知道引用比指针更受欢迎,但在需要时将所有这些“.”改为“->”是非常乏味的。因此,始终使用指针而不是引用,以便在需要时轻松地将它们转换为智能指针,这是一种可接受的做法吗?或者有什么方法可以快速将引用更改为指针?

使用引用的目的是让事情变得稍微容易一些,因为您可以像使用常规的非指针变量一样使用它们

但如果不容易,甚至更难,我认为绝对没有理由使用它们


使用指针没有什么错。

更改体系结构只是为了方便在源代码中替换文本

,这永远不是有效的设计决策。正如Luchian所解释的,这似乎不是一个真正存在的考虑

因此,始终使用指针而不是引用,以便在需要时轻松地将它们转换为智能指针,这是一种可接受的做法吗

不。一般来说,总是规则总是不好的。(包括这个)。为什么要将引用转换为智能指针?如果它是一个引用,您不需要担心内存管理,这就是智能指针的用途

或者有没有办法快速更改指针的引用


是的,获取它的地址(
&
)。

使用指针而不是引用不会使以后转换为智能指针变得更容易。你不能仅仅用智能指针替换所有指针,期望任何东西都能工作;智能指针的语义与指针的语义有很大不同(通常不是您想要的)


在具有值语义的类中使用指针而不是引用是有意义的,因为用引用实现预期的赋值语义即使不是不可能,也是很困难的。智能指针与此无关。

Always规则总是不好的,包括以下规则:)+1谢谢,为什么我要将引用转换为智能指针?当我无法决定传递给方法、引用、指针或智能指针的内容时,就会发生这种情况。请不要使用脚本。或者甚至找到并替换所有。一个接一个地搜索和替换,这样您就可以确定您所更改的所有内容。@MahmoudAl Qudsi我认为脚本是完全安全的。如果它弄乱了某些东西,结果将无法编译。危险在于它会编译。我以前就被这类东西弄得焦头烂额——感谢上帝的版本控制。@MahmoudAl Qudsi在这种情况下可能没问题,因为用
->
替换
只会在正确的替换方式下编译。我看不到任何运行时错误会因为自动执行此操作而产生。是的,你们使用哑指针是正确的。当一个方法既可用于
->
又可用于
时,智能指针会出现问题,难以通过引用实现赋值语义?还是没有?@BenjaminLindley这取决于指针的用途。如果是用于可变大小的数据,则需要一个深度副本;用指针实现语义不一定很简单,但用引用实现语义是不可能的。但是,如果指针用于导航(在具有值语义的对象中通常很少见,但也有例外),那么默认的
操作符=
会执行此任务(同样,正确的语义无法使用引用实现)。哦,好的。我误解了你。我不知道你指的是数据成员。我以为你指的是赋值运算符的参数,你只是打了个错字。旁注:将
variable.func()
更改为
variable->func()
可以通过从
variable.
更改为
variable->
@chris轻松完成,这就是乏味的部分:)您可能还必须先选择整个函数才能执行“仅查找和替换选定的文本”。对不起,各位,这里的注释似乎没有达到任何形式的解决方案。如果我有了它,它就不会在这里了:)