Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- struct A
- {
- //~A() {}
- };
- int main()
- {
- A* a = new A[10];
- delete a; // heap corruption when the user destructor is defined
- int *b = new int[100];
- delete b; // no heap corruption
- };
- struct NonTrivialDestructor {
- std::string s;
- };
- struct NotTrivialEither : NonTrivialDestructor {};
- v
- +------+---+---+---+--
- | size | T | T | T |...
- +------+---+---+---+--
- ^
- pseudo-delete[](T * p) {
- size_t *size = reinterpret_cast<size_t*>(p)-1;
- for (size_t i = 0; i < *size; ++i)
- (p+i)->~T();
- deallocate(size);
- }
- v
- +---+---+---+--
- | T | T | T |...
- +---+---+---+--
- ^
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement