Bonjour,
J'ai un code qui ressemble à ça :
J'ai une classe fille qui initialise sa partie mère en lui passant un de ces champs. C'est un peu border line car la partie dérivée (et donc le champ en question) n'est pas construite à ce moment, mais ici il s'agit d'une classe (ControlBlock) qui ne contient rien qui ait besoin d'une initialisation. Mon vrai ControlBlock contient une structure C (donc sans constructeur), un tableau (un vrai, pas un std::array) et une taille (en static constexpr). Il se mime donc assez bien avec un std::array, d'où mon exemple minimaliste. Sauf que mon exemple ne reproduit pas mon problème : dans ma vraie application, ça crashe dés que je tente d'utiliser mon ControlBlock dans la méthode start().
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44 #include <array> #include <iostream> using byte = std::uint8_t; template<std::size_t __size> using ControlBlock = std::array<byte, __size>; class Base { public: template<std::size_t __size> Base(ControlBlock<__size>& controlBlock) : buffer_m(controlBlock.data()), size_m(__size) { } void start() { std::cout << __PRETTY_FUNCTION__ << std::endl; buffer_m[0] = 42; } private: byte *buffer_m; std::size_t size_m; }; class Derived : public Base { public: Derived() : Base(cb_m) { } private: ControlBlock<512> cb_m; }; int main() { ControlBlock<128> buffer; Base base = Base(buffer); base.start(); Derived derived; derived.start(); }
Est-ce totalement illégal de faire ce que je fais ou est-ce que j'ai une chance que ça puisse fonctionner ?
Merci d'avance !![]()
Partager