C ++, bir işlev çağrısı içinde oluşturulan ancak bir parametre olarak kullanılmayan geçici bir değişkenin yaşam süresi için bir garanti sağlıyor mu? İşte örnek bir sınıf:
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;
};
Ve işte bunu nasıl kullanacağınız:
// 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);
Geçici StringBuffer nesnesinin yıkıcısı ne zaman çağrılacak? Bu mu:
- GetString'i aramadan önce?
- GetString döndükten sonra?
- Derleyiciye bağlı mı?
C ++ 'nın, yerel bir geçici değişkenin kendisine bir başvuru olduğu sürece geçerli olacağını garanti ettiğini biliyorum - bu, bir üye değişkene başvuru olduğunda ana nesneler için geçerli midir?
Teşekkürler.
m_str.reserve(maxlength)içinde char * Size(int maxlength)aksi yıkıcı atabilseydin.