这是在C++中在堆上创建变量的方法:
T *ptr = new T;
ptr是指向新T的指针,显然。我的问题是,你能这样做吗:
T *ptr = new T*;
这似乎会导致一些非常危险的代码。有没有人知道这是否可行/如何正确使用它?
这是在C++中在堆上创建变量的方法:
T *ptr = new T;
ptr是指向新T的指针,显然。我的问题是,你能这样做吗:
T *ptr = new T*;
这似乎会导致一些非常危险的代码。有没有人知道这是否可行/如何正确使用它?
int** ppint = new int*;
*ppint = new int;
delete *ppint;
delete ppint;
new T*
返回一个指向 T 类型的指针的指针。因此,声明不正确,应该改为:
T** ptr = new T*;
它将驻留在堆上。
提到为什么需要类似这样的东西。想到的是动态数组。(实际上大多数向量实现都使用它。)
// Create array of pointers to object
int start = 10;
SomeObject** dynamic = new SomeObject*[start];
// stuff happens and it gets filled
// we need it to be bigger
{
SomeObject** tmp = new SomeObject*[start * 2];
for (size_t x = 0; x < start; ++x)
tmp[x] = dynamic[x];
delete [] dynamic;
dynamic = tmp;
}
// now our dynamic array is twice the size
是的,你可以声明一个指向指针的指针……而且是在堆上分配的。
你不能这样做
T *ptr = new T*;
由于new foo
的返回类型是"指向foo的指针"或foo *
。
您可以执行以下操作:
T **ptr = new T*;