我是 C++ 的新手。我在我的 PC 上测试了一个唯一指针:我认为它会分配在堆上,但它显示在堆栈上。这让我很困惑。唯一指针是否在堆或堆栈上分配内存?
#include <memory>
#include <stdio.h>
void RawPointer()
{
int *raw = new int;// create a raw pointer on the heap
printf("raw address: %p\n", raw);
*raw = 1; // assign a value
delete raw; // delete the resource again
}
void UniquePointer()
{
std::unique_ptr<int> unique(new int);// create a unique pointer on the stack
*unique = 2; // assign a value
// delete is not neccessary
printf("unique pointer address: %p\n", &unique);
}
int main(){
RawPointer();
UniquePointer();
}
它有外壳:
raw address: 0x555cd7435e70
unique pointer address: 0x7ffcd17f38b0
谢谢兄弟,
最佳答案
您在 UniquePointer
函数中打印的是 std::unique_ptr
类对象 的地址。此类有一个内部成员,它是分配数据的实际地址。
您可以使用 get()
访问此实际 地址成员函数,如下面的代码所示(当我尝试时,它为我提供了与原始指针完全相同的地址 - 尽管情况并非总是如此):
void UniquePointer()
{
std::unique_ptr<int> unique(new int);// create a unique pointer on the stack
*unique = 2; // assign a value
// delete is not neccessary
// printf("unique pointer address: %p\n", &unique);
printf("unique pointer address: %p\n", unique.get());
}
注意:%p
格式说明符需要一个 void *
指针作为参数;然而,隐式转换 到 void 指针(从指针到另一种类型)是明确定义的行为 - 参见此处:void pointers: difference between C and C++ .
随时要求进一步澄清和/或解释。
关于c++ - 唯一指针是否在堆或堆栈上分配内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61834575/