Bonjour

Le programme qui suit alloue les objets de la classe Twin sur la pile ou bien sur le tas,
suivant l'emploi qui est fait de new dans le programme main.
Y a t il un moyen de faire dire aux compilateurs (g++, icpc) les lignes où l'allocation aura lieu sur la pile,
car dans ce cas le pointeur stocké dans le _casier sera invalide.
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
 
#include <iostream>
 
class Base {
};
 
class Range {
  private:
    Base* _val;
  public:
    Range(Base* val): _val(val){};
};
 
class Inter : public Base {
  private:
    int more_properties;
  public:
};
 
class Twin : public Inter {
  private:
    Range _casier;
    char const* const _val;
  public:
    Twin(char const* const val): _casier(Range(this)), _val(val)
{
      std::cerr << val << " " << (long)this << std::endl;
}
};
 
int main(int argc, char **argv) {
  Twin("a");
  new Twin("b");
  Twin* cc = new Twin("c");
}