Příspěvky

Zobrazují se příspěvky z srpen, 2019

Past na konstruktor - static v C++

Past na konstruktor - static v C++Autor: progrosh
Občas zahlédnu v našem kódu statické členské proměnné, ikdyž se jim snažíme vyhýbat, jak se dá. Někdy se bez static zkrátka neobejdeme, ale právě proto bychom měli mít na paměti i rizika, která jsou s použitím tohoto způsobu alokace spojená. U statických členských proměnných se totiž snadno může stát, že se jejich konstruktory vůbec nezavolají v pořadí, jak bychom očekávali. A pozor! V C++ to není chyba kompilátoru nebo linkeru, ale vlastnost!Ukážeme si to na malém příkladu. Začneme tím nejjednodušším programem v C++:intmain(){return0;}Program nebude dělat nic. Pouze vrátí 0 jako svůj exit code. Náš článek je o static a konstruktorech, tak se vše bude odehrávat v konstruktorech tříd a staticky alokovaných členských proměnných tříd, které se chovají podobně, jako globální proměnné.
Vytvoříme si 3 jednoduché třídy A, B a C.// @file testA.h#ifndef A_H_#define A_H_#include<iostream> class A {int x; public:A():x(1){ std::cout <…