Voila, j'ai une classe du type :

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
 
 
class Widget
{
  public:
    Widget() : s_(0) {}
    ~Widget() {  delete s_; s_ = 0; }  
 
    void execute()
    {
      s_.apply();
    }
 
    void setStrategy(Strategy* s)
    {
      if (s_ != 0)
        delete s_;
      s_ = s;
    }
 
  private:
   Strategy* s_;
}

Voila, rien d'extraordinaire jusque la , mais supposons, qu'au lieu de faire :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
widget.setStrategy(new Strategy)
Je fasse :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
widget.setStrategy(&Strategy())
Dans ce derner cas, la classe Widget appelera un delete sur un objet alloue sur la pile ....
Donc, je voulais savoir comment s'en sortir dans ce cas ?
Je sais qu'on pourrait surcharger et encapsuler en private ::operator new pour eviter de faire un new Strategy et supprimer le delete dans la classe Widget, mais existe - t - il d'autres moyens ?