Hacker News new | ask | show | jobs
by sacnoradhq 1187 days ago

    #include <iostream>

    using namespace std;

    class BadProgrammer {
    public:
      void yep() {
        delete this;
      }
    };

    int main() {
      auto x = BadProgrammer{};

      x.yep();

      cout << "You are a terrible engineer and should feel bad, but don't worry because this will never print." << endl;

      return 0;
    }

g++ -Wall -Wextra -Wpedantic main.cc # compiles just fine

clang++ -Wall -Wextra -Wpedantic main.cc # also compiles just fine

1 comments

FWIW the behavior of delete on a pointer that isn’t either null or returned from new is undefined.

So a conforming C++ compiler doesn’t have to diagnose this mistake, and similarly the compiled program doesn’t have to do anything meaningful either. For example, just ignoring the delete and printing the message is as valid a result as the more useful crash at the site of the bad operation.

That this situation is "working as intended" and there are programmers who do not see a problem with that is... well it makes me despair.
What's your proposed alternative? What does the alternative cost? If non-zero, what mechanism would you use to disable it?