C ++ fornece uma garantia para a vida útil de uma variável temporária que é criada dentro de uma chamada de função, mas não usada como um parâmetro? Aqui está um exemplo de aula:
class StringBuffer
{
public:
StringBuffer(std::string & str) : m_str(str)
{
m_buffer.push_back(0);
}
~StringBuffer()
{
m_str = &m_buffer[0];
}
char * Size(int maxlength)
{
m_buffer.resize(maxlength + 1, 0);
return &m_buffer[0];
}
private:
std::string & m_str;
std::vector<char> m_buffer;
};
E aqui está como você o usaria:
// this is from a crusty old API that can't be changed
void GetString(char * str, int maxlength);
std::string mystring;
GetString(StringBuffer(mystring).Size(MAXLEN), MAXLEN);
Quando o destruidor do objeto StringBuffer temporário será chamado? É isso:
- Antes da chamada para GetString?
- Depois que GetString retornar?
- Depende do compilador?
Eu sei que C ++ garante que uma variável temporária local será válida, desde que haja uma referência a ela - isso se aplica a objetos pai quando há uma referência a uma variável de membro?
Obrigado.
m_str.reserve(maxlength)
em char * Size(int maxlength)
, caso contrário, o destruidor poderia jogar.