什么是使用之间的防御
(1)HEAP num = *新HEAP
(2)HEAP * num =新的HEAP
在c ++中。另外,当编写一个方法时,如果它们使用(2),如何返回一个对象?
在C ++中,符号通常根据其上下文改变含义。在
HEAP num =* new HEAP
该 * 是个 解引用算子 。这从指针获取对象的值。 *
*
在
HEAP *num = new HEAP
* 不是运算符,它是表示变量是指针的类型的一部分。
* 也用作乘法运算符。注意 * 可以重载以执行程序员希望它做的任何事情,但是这应该保留用于类似乘法和解除引用的行为以防止混淆。
复制构造 自动变量 HEAP num ,这是一个 HEAP ,有来源 * new HEAP 哪里 * new HEAP 是指向a的指针 动态分配 HEAP 这很快被解除了 * 运营商获得其价值。不要使用此选项,因为没有指针保留在动态分配中,因此几乎无法释放。这是内存泄漏。
HEAP num
HEAP
* new HEAP
初始化自动变量 HEAP *num ,这是一个指针 HEAP ,带有指向动态分配的指针 HEAP 。避免使用此选项,因为它需要程序员手动管理 所有权 的分配 delete 在未来的某个时刻完成一次。令人惊讶的是这样一个听起来很简单的事情是多么困难。
HEAP *num
delete
比较喜欢
HEAP num;
这是一个自动 HEAP 变量,所以你不必担心所有权或
std::unique_ptr<HEAP> num = std::make_unique<HEAP>();
这是一个自动 std::unique_ptr<HEAP> 包含动态分配的变量 HEAP 并管理您的所有权。 文档 std::unique_ptr 。
std::unique_ptr<HEAP>
std::unique_ptr
HEAP * getHeapPointer() { HEAP * num = new HEAP; return num; }
或简单地说,
HEAP * getHeapPointer() { return new HEAP; }