我可以查询指针是否是动态分配数组中的第一个?

问题描述 投票:0回答:1

如果delete []“知道”任何动态分配的数组的大小,我不应该以某种方式查询它的大小吗?

这是来自cplusplus.com和我自己的一些代码混合来表明我的意思:

// operator delete[] example
#include <iostream>     // std::cout

struct MyClass {
  MyClass() {std::cout <<"MyClass constructed\n";}
  ~MyClass() {std::cout <<"MyClass destroyed\n";}
};

int main () {
  MyClass * pt;
  MyClass * foo;
  MyClass * bar;

  pt = new MyClass[3];
  delete[] pt;      
  foo = new MyClass[12];
  delete[] &foo[0]; // this works      
  bar = new MyClass[33];
  delete[] &bar[1]; // this does not work

  return 0;
}

动机:如果数组的第一个元素是特殊的,那么只需要最后一个指针并递减,直到检测到第一个......(我想通过查找delete []异常/错误可以“找到” )

c++ arrays
1个回答
2
投票

你的方法 - 虽然很有创意:-) - 不起作用。原因是你不能“试试”delete;你必须确保传递给delete的指针是之前由new获得的指针。否则,行为未定义(例如,参见cppreference.com上的this definition of delete):

如果未从相应的标准库分配函数获取传递给标准库释放函数的指针,则行为未定义。

所以任何不是“第一个指针”(即数组的开头)的尝试都会产生未定义的行为(崩溃,某些模糊,甚至没有),你不能依赖这样的“行为”。

© www.soinside.com 2019 - 2024. All rights reserved.