zel*_*ell -2 c++ malloc new-operator
我多年来一直在使用Java.现在我需要了解一个C++程序.
TimeStamp theTimeStamp;
theTimeStamp.update();
Run Code Online (Sandbox Code Playgroud)
令我困惑的是为什么我们不写
TimeStamp theTimeStamp = new();
Run Code Online (Sandbox Code Playgroud)
我的直觉是,要使用对象,应首先分配内存空间并将其与对象关联.
我想这是Java和C++从根本上有所不同的一点?你能澄清一下吗?
[EDIED]我写了'TimeStamp theTimeStamp = malloc();'
你永远不会用TimeStamp theTimeStamp = malloc();C++ 写.
首先,因为malloc来自C并且实际上不应该在C++中使用.其次,它不知道它的上下文,需要一个参数来指定它必须分配多少内存,并返回一个你需要转换的无类型指针.
相反,你就是写作
TimeStamp * theTimeStamp = new TimeStamp();
Run Code Online (Sandbox Code Playgroud)
请参阅 - 这与Java非常相似.请注意*那里?这是指定它theTimeStamp是一个指针(在Java中,用户定义类型的每个变量都是一个指针/引用,因此您不必关心明确说明这一点).
但是,在C++中,您可以选择是否需要
*,如第一个代码示例中所做的那样).但这意味着,一旦theTimeStamp超出范围(即通常在定义变量的块的末尾),变量将自动销毁.这必须注意"手动"删除是为什么在C++中通常不直接使用这样的原始指针,而是所谓的智能指针类型,例如std::shared_ptr来自新的C++ 11标准.他们为您免除了必须手动删除的苦差事(在很多情况下可能会忘记它).还有其他智能指针类型; 该shared_ptr然而,提供最接近的相似什么Java那样-你可以指定一个shared_ptr到另一个,从而保持它指向活着的对象,只有当最后一个共享指针的指向对象的被破坏,会指向的对象也销毁.
无论何时你都可以,但在C++中最好不要使用指针,而是使用自动分配的变量.
| 归档时间: |
|
| 查看次数: |
268 次 |
| 最近记录: |