在每个可能的地方都使用指针是一种好习惯吗? [复制]

Posted

技术标签:

【中文标题】在每个可能的地方都使用指针是一种好习惯吗? [复制]【英文标题】:Is it good practice to use pointers in every place possible? [duplicate] 【发布时间】:2012-04-21 16:33:59 【问题描述】:

可能重复:Why use pointers?

我刚刚掌握了指针的窍门,现在我的做法是积极寻找使用指针的场合,并在我可以设计的每一种可能的情况下使用它们。这是一个好主意吗?如果没有,为什么不呢?还是只是个人喜好?

【问题讨论】:

***.com/questions/162941/why-use-pointers 这不是一个好主意。你刚学会用锤子,所以一切看起来都像钉子。 看看这个问题:***.com/questions/1064325/… 在你学习的过程中,你可以在任何地方使用它们,直到你的手指被烫伤......这将拓宽你的经验,并为你的学习周期提供新的推动力。 当问题是“我应该在所有可能的地方使用x”时,答案是 【参考方案1】:

不,绝对不是1,在 C++ 中。

在现代 C++ 中,您应该尽可能地避免使用指针。仅在确实需要时才使用指针,并尝试查看在这些情况下是否可以使用智能指针(如shared_ptrunique_ptr)。谨慎使用手动堆分配(new/delete),尽可能让语言处理资源的分配和释放。 了解 RAII、移动语义等。

我鼓励您观看Going Native 2012 的演示文稿。一些演讲者(不记得是 Bjarne Stroustrup 还是 Herb Sutter),基本上说newdelete 几乎不应该出现在应用程序代码中。

1 好吧,在编程中没有什么是绝对的,无论是 C++ 还是其他。

【讨论】:

【参考方案2】:

您通常应该只在需要时使用指针。在 C 中,这往往是相当多的。在 C++ 中,大多数代码根本不应该直接使用指针——它应该使用某种更智能的类来包装指针(unique_ptrshared_ptrvector 等)

【讨论】:

【参考方案3】:

因为如果你在任何地方都使用指针,你的代码最终可能看起来像这样

typedef solution_type (*algorithm_ptr_type) (
    problem_type problem,
    void (*post_evaluation_callback)(void *move, int score)/* = NULL*/
);

或者这个

#include <stdio.h>
#define A(a) G a();
#define B(a) G (*a)();
#define C(a,b) G a()  printf(b); return X; 
typedef struct F G;A(a)A(b)A(c)A(d)A(e)A(f)A(g)A(h)A(i)A(j)A(k)A(l)A(m)A(n)A(
o)A(p)A(q)A(r)A(s)A(t)A(u)A(v)A(w)A(x)A(y)A(z)A(S)A(N)void Q();struct FB(a)B
(b)B(c)B(d)B(e)B(f)B(g)B(h)B(i)B(j)B(k)B(l)B(m)B(n)B(o)B(p)B(q)B(r)B(s)B(t)B(
u)B(v)B(w)B(x)B(y)B(z)B(S)B(N)void(*Q)();X=a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,
q,r,s,t,u,v,w,x,y,z,S,N,Q;C(a,"z")C(b,"y")C(c,"x")C(d,"w")C(e,"v")C(f,"u")C(
g,"t")C(h,"s")C(i,"r")C(j,"q")C(k,"p")C(l,"o")C(m,"n")C(n,"m")C(o,"l")C(p,"k"
)C(q,"j")C(r,"i")C(s,"h")C(t,"g")C(u,"f")C(v,"e")C(w,"d")C(x,"c")C(y,"b")C(z,
"a")C(S," ")C(N,"\n") void Q()main()X=g().s().v().S().j().f().r().x().p().
S().y().i().l().d().m().S().u().l().c().S().q().f().n().k().v().w().S().l().e
().v().i().S().g().s().v().S().o().z().a().b().S().w().l().t().N();

http://www.cise.ufl.edu/~manuel/obfuscate/typing.hint

【讨论】:

我同意基本思想(“不要过度使用指针”),但两个例子都不好。首先,回调具有完全有效的用途,其次,混淆代码是故意混淆的,而不是因为它使用指针。

以上是关于在每个可能的地方都使用指针是一种好习惯吗? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

大量使用静态成员变量是一种好习惯吗? [复制]

通过指向常量的指针释放内存是一种好习惯吗

将 Optional 用作类中的属性是一种好习惯吗? [复制]

使用 MongoDB 数据库为每个查询打开一个新连接是一种好习惯吗?

将 realloc() 返回的地址分配给同一个指针是一种好的编码习惯吗?

使用引用来布置简单的功能是一种好习惯吗