How does delete deal with pointer constness?

前端 未结 5 1898
不知归路
不知归路 2021-01-18 00:30

I was reading this question Deleting a const pointer and wanted to know more about delete behavior. Now, as per my understanding:

delete expressio

相关标签:
5条回答
  • 2021-01-18 00:58

    operator delete accepts a void*. As part of a test program I overloaded operator delete and found that operator delete doesn't accept const pointer.

    How did you try this? It certainly does accept const pointers:

    #include <memory>
    
    int main() {
        void* const px = 0;
        delete px;
        ::operator delete(px);
    }
    

    This code is correct, compiles (albeit with a justified warning) and executes.

    EDIT: Reading the original article – you aren't talking about a const pointer but a pointer to const, which is something else. The reason why this has to work is described there. As for why it's working: others have said this.

    0 讨论(0)
  • 2021-01-18 01:02

    As this answer says, delete is not a method like any other, but a part of the langage to destruct objects. const-ness has no bearing on destructability.

    0 讨论(0)
  • delete just makes a call to deallocate the memory the pointer points to, it doesn't change the value of the pointer nor the object. Therefore, delete has nothing to do with the const-ness of the pointer or object pointed to.

    0 讨论(0)
  • 2021-01-18 01:12

    const_cast doesn't really do anything – it's a way to suppress compiler moaning about const-ness of the object. delete keyword is a compiler construct, the compiler knows what to do in this case and doesn't care about const-ness of the pointer.

    0 讨论(0)
  • 2021-01-18 01:13

    delete is an operator that you can overload. It takes a pointer as an argument, and frees the memory, possibly using free. The compiler allows this whether the pointer is const or not.

    0 讨论(0)
提交回复
热议问题