你永远不会用TimeStamp theTimeStamp = malloc();
C++ 编写。
首先,因为malloc
它来自 C 并且真的不应该在 C++ 中使用。其次,它不知道它的上下文,需要一个参数来指定它必须分配多少内存,并返回一个你需要转换的无类型指针。
相反,你会写
TimeStamp * theTimeStamp = new TimeStamp();
看 - 这与 Java 非常相似。注意到里面了*
吗?那是为了指定 thattheTimeStamp
是一个指针(在 Java 中,用户定义类型的每个变量都是一个指针/引用,因此您不必关心明确说明这一点)。
但是,在 C++ 中,您可以选择是否要
- C++ 使用变量范围自动处理创建和销毁(即,没有
*
, 就像在您的第一个代码示例中所做的那样)。然而,这意味着一旦theTimeStamp
超出范围(即通常在定义变量的块的末尾),变量将自动销毁。
- 或者,如果您想自己进行动态内存分配(Java 中的默认情况) - 但与 Java 相比,您还必须自己关心在 C++ 中删除对象。
必须“手动”处理删除是为什么在 C++ 中通常不直接使用这种原始指针,而是使用所谓的智能指针类型,例如std::shared_ptr
来自新的 C++11 标准。它们使您不必手动进行删除(并且在许多情况下可能会忘记它)。还有其他智能指针类型;然而,shared_ptr
它提供了与 Java 所做的最相似的事情 - 您可以将 a 分配shared_ptr
给另一个,从而保持它指向的对象处于活动状态,并且只有当指向对象的最后一个共享指针被销毁时,指向的对象也会是被摧毁。
然而,只要有可能,在 C++ 中最好完全避免使用指针,而是使用自动分配的变量。