是否可以在不使用"new"(和隐式指针)的情况下创建在 C++ 堆上分配的对象?

Can I create an object allocated on the heap in C++ without using "new" (and implicitly pointers)?

本文关键字:C++ 创建 情况下 对象 分配 指针 new 是否      更新时间:2023-10-16

据我所知,例如,如果我想创建一个在堆栈上分配内存的c++对象,我必须使用关键字new,因此返回一个指向在堆上创建的对象的指针。有没有办法在堆上创建一个对象,并直接访问它,而不使用指针?

有没有办法在堆上创建对象,并直接访问它,而不使用指针?

让我们先说c++标准没有堆栈的概念,因为c++可以在没有的机器上编译。所以,从现在开始,我就假设你的意思是动态分配内存。

您可以通过使用malloc(和类似的C函数)来避免使用new来动态分配内存,但我不建议这样做,特别是因为您仍然会使用指针。

另一种选择是将std::unique_ptrstd::make_unique一起使用,并生成动态分配的资源,并仅绑定对它的引用:

auto ptr = std::make_unique(...);
auto& ref = *ptr;

,然后你就可以避免使用指针语义。但实际上:只要使用std::unique_ptr就可以了。