Bonjour à tous,

Est-ce que vous pouvez me dire si le code suivant est valide par rapport à la durée de vie de la string renvoyée?
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
 
struct Foo
{
  Foo(char const* s) {
    long len = lstrlen(s);
    this->bstrVal	= ::SysAllocStringLen(NULL, len);
    if(len)
    {
      long rc = MultiByteToWideChar(CP_ACP, 0, s, len, bstrVal, len);
      if(rc!=-1)
        this->bstrVal[rc] = 0;
    }
  }
private:
  BSTR bstrVal;
};
 
std::string bar() {
  std::string result;
  result = "Action";
  return result;
}
 
int main() {
  Foo f(bar.c_str());
}
J'ai un doute sur le faite que la chaine renvoyée par c_str() soit encore valide lorsque je la manipule dans le constructeur de Foo.