gpt4 book ai didi

c++ - delete 如何区分内置数据类型和用户定义的数据类型?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:17:46 25 4
gpt4 key购买 nike

如果我这样做:

// (1.)
int* p = new int;
//...do something
delete p;

// (2.)
class sample
{
public:
sample(){}
~sample(){}
};
sample* pObj = new sample;
//...do something
delete pObj;

那C++编译器怎么知道delete后面的对象是内置数据类型还是类对象呢?

我的另一个问题是,如果我 new 一个指向 int 数组的指针,然后我 delete [] 那么如何编译器知道要取消分配的内存块的大小吗?

最佳答案

  1. 编译器知道指向对象的类型,因为它知道指针的类型:

    • p 是一个 int*,因此指向的对象将是一个 int
    • pObj 是一个 sample*,因此指向的对象将是一个 sample
  2. 编译器不知道您的 int* p 是指向单个 int 对象还是数组(int[N]).这就是为什么 必须记住对数组使用delete[] 而不是delete

    要取消分配的内存块的大小,最重要的是,要销毁的对象的数量是已知的,因为 new[] 将它们存储在某个地方,而 delete[] 知道在哪里检索这些值。 This question from C++ FAQ Lite展示了实现 new[]delete[] 的两种常用技术。

关于c++ - delete 如何区分内置数据类型和用户定义的数据类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2347823/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com