Accéder au contenu principal

A discussion about "delete this" in C++

To test your C++ programming experience and curiosity, a pop quiz question could be : what can you say about the C++ expression "delete this"?
In C++, "this" keyword is used in object member functions and is a pointer to the curent object.
As a beginner, the answer seemed to be obvious to me: how the language can allow an object to commit suicide? Impossible, I thought.
However, it's possible to "delete this". Deleting the current object does not cause compilation errors. Although "delete this" is accepted by compilation, its usage can lead to logic errors. Indeed, if this suicide is absolutely necessary, the following rules must be observed:

1. The object must be created via dynamic allocation using new operator.
2. No member function of the object is invoked on "this" object after suicide.
3. No member object of "this" object is called after suicide.
4. Nothing will use "this" object after suicide.

PS: I once tried to violate rule #3, and the result was not surprising: Wonderful Death Blue Screen crash followed by an automatic restart! Nice!

Commentaires

Posts les plus consultés de ce blog

Setting up Rust on Windows 10 with MSYS2 without installing Visual Studio

Setting up Rust on Windows 10 with MSYS2 without installing Visual Studio  1. Install MSYS2 2. Update MSYS2 and run : pacman -Sy && pacman -Syu  and install git and gcc: pacman -S git &&  pacman -S mingw-w64-x86_64-toolchain 3. Open the MSYS2 terminal and install the rust compiler with :  pacman -S mingw-w64-x86_64-rust You may stop here but you will miss the rustup package (which is not part of MSYS2) to manage the Rust compiler environment. To install rustup , follow the next steps. 4. Clone the rustup git repository :  git clone git@github.com:rust-lang/rustup.git --depth=1 5. Compile and run rustup: cd rustup cargo run --release 6. Once rustup detects the previously installed rust compiler and asks to uninstall it before you can continue. So, open a new MSYS2 terminal and uninstall rust :  pacman -R mingw-w64-x86_64-rust 7. Now back to the rustup terminal, choose yes to continue the installation. On the next question choose : custom ins...

Installing Ubuntu 16.04 on an Alienware Aurora R5

Installing Ubuntu 16.04 LTS on an Alienware Aurora R5 with NVIDIA GPU support (Dual boot Windows) I have compiled these instructions from my succesful installation on Nov 25. Would you be happy to live without Windows? If not use Dual Boot. This procedure is inspired from this DELL support page : http://www.dell.com/support/article/uk/en/ukbsdt1/SLN301754/en You can refer to the link above for additional steps and to see useful screenshots. However, please, make sure to take care about the GPU-related  steps below. Re-installing Windows 10 with BIOS Secure Boot to OFF First, check that have only one disk installed in your machine. I have found that having one disk only makes it easier to re-install Windows. Secondly, an important step is to create two USB Recovery disks. Use two USB memory sticks bigger than 16 GB supporting the USB 3.0 standard (file copy will be much faster). Use the first one to create a recovery disk for Windows 10, as a backup if the instal...

How to create an executable from a Scala project

I started to have fun with scala and I wanted to be able to package and launch a Scala executable. It is an eclipse project and it is already using Maven for dependency resolution. I found the following solutions (to confirm) 1. Use SBT as a build tool. SBT seems to support the Maven pom.xml files for dependency resolution. 2. Use Gary Boone's solution by wrapping the Scala project entry point into a Java static main function 3. Use mvn assembly : single plugin as described on stackoverflow