何时使用指针,何时不使用?
我习惯于做Java编程,在编程时你永远不必考虑指针。但是,目前我正在用C++编写一个程序。在创建具有其他类成员的类时,何时应使用指针,何时不应使用指针?例如,我什么时候想这样做:
class Foo {
Bar b;
}
与此相反:
class Foo {
Bar* b;
}
我习惯于做Java编程,在编程时你永远不必考虑指针。但是,目前我正在用C++编写一个程序。在创建具有其他类成员的类时,何时应使用指针,何时不应使用指针?例如,我什么时候想这样做:
class Foo {
Bar b;
}
与此相反:
class Foo {
Bar* b;
}
首先避免使用指针。
在以下情况下使用它们:
Bar
Foo
Bar
Foo
Bar
null
Bar
实际上是一个基类,您需要实例是多态的。在上述任何一种情况下 (*),请先使用智能指针,例如 boost::shared_ptr。否则,您迟早可能会忘记解除分配内存。一旦你知道你在做什么,就要根据具体情况考虑哪种指针类型是最好的。
(*) 任何情况 – 可能除了关于 GUI 小部件的项目符号;在这种情况下,您的工具包很可能也会为您管理资源。
class Foo {
Bar b;
}
b 包含在 Foo 中。如果 Foo 对象结束生存期,b 也会自动结束生存期。这就是模型组成。上面的b表示对象本身,而不仅仅是像Java中的指针。因此,如果 b 超出范围,则对象将结束生存期。
class Foo {
Bar * b;
}
此处,对象 b 指向的对象由 Foo 对象使用或引用。如果 Foo 对象结束生存期,则对象 b 指向的对象可能会继续存在,具体取决于具体情况。这可用于对聚合和一般关系进行建模。例如,该对象可以与其他 Foo 对象共享。
指针大致相当于 Java 中的引用。他们也可以指出什么都没有。如果指针指向无,则为空指针。
与指针类似的是引用。C++中的引用必须初始化,并且只能指向一个(有效)对象,并且该对象已初始化引用。因此,引用不能像Java中那样具有“无”的值。null