January 2018
Intermediate to advanced
374 pages
9h 53m
English
Note that writing an empty destructor prevents the compiler from implementing certain optimizations. As you can see in the following table, copying an array of a trivial class with an empty destructor yields the same, non-optimized, assembler code as copying with a handcrafted for loop:
|
Empty destructor and std::copy |
Copy by handwritten for-loop |
struct Point { int x, y; ~Point(){}};auto copy(Point* src, Point* dst) { std::copy(src, src+64, dst);} |
struct Point { int x, y;};auto copy(Point* src, Point* dst) { const auto end = src + 64; for(; src != end; ++src, ++dst) { *dst = *src; }} |
This generates the following x86 assembler:
xor eax, eax.L2: mov rdx, QWORD PTR [rdi+rax] mov QWORD PTR [rsi+rax], ...