C++ Logo

std-proposals

Advanced search

Re: [std-proposals] Replace an object -- but retain old object if new object fails to construct

From: Frederick Virchanza Gotham <cauldwell.thomas_at_[hidden]>
Date: Wed, 29 Oct 2025 16:06:15 +0000
On Wednesday, October 29, 2025, Arthur O'Dwyer wrote:

>
>>
>> (Type 1) Cannot be relocated
>> (Type 2) Can be relocated by a simple memcpy
>> (Type 3) Can be relocated by an algorithm built into the compiler
>> (Type 4) Can be relocated by a custom-implemented relocator algorithm
>> provided by the author of the class
>>
>>
>
> There's a very clear physical delineation between Type 1, Type 2, and "all
> the rest." The line between Type 3 and Type 4 is not physical but
> linguistic, and arbitrary.
>



Key difference between a Type 3 algorithm and a Type 4 algorithm:

Type 4 algorithm can be written in fully-portable C++ code with
well-defined behaviour across all conforming implementations. An example
would be the relocator for libstdc++'s std::string on Linux. (Or for any
movable class: the combination of move + destroy).

Type 3 algorithm __must__ be written in platform-specific code targeting a
particular operating system, a particular CPU instruction set, or a
particular software or hardware or firmware configuration.

Type 3 will typically be written in very simple C code or assembler,
whereas Type 4 will be full-blown C++ code.

And more on a human note . . . you can have a very proficient C++
programmer who isn't really sure what a vtable is, and therefore doesn't
even know what the Type 3 algorithm is doing, whereas any decent C++
programmer will understand the Type 4 algorithm.

I'm sure there are C++ programmers out there who have full understanding of
how virtual methods work, without really knowing much about how vtables
work.

Received on 2025-10-29 16:06:18