C ++ có cung cấp sự đảm bảo cho thời gian tồn tại của một biến tạm thời được tạo trong một lệnh gọi hàm nhưng không được sử dụng làm tham số không? Đây là một lớp mẫu:
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;
};
Và đây là cách bạn sẽ sử dụng nó:
// 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);
Khi nào thì hàm hủy cho đối tượng StringBuffer tạm thời sẽ được gọi? Là nó:
- Trước cuộc gọi đến GetString?
- Sau khi GetString trả về?
- Trình biên dịch phụ thuộc?
Tôi biết rằng C ++ đảm bảo rằng một biến tạm thời cục bộ sẽ hợp lệ miễn là có một tham chiếu đến nó - điều này có áp dụng cho các đối tượng mẹ khi có một tham chiếu đến một biến thành viên không?
Cảm ơn.
m_str.reserve(maxlength)vào char * Size(int maxlength), nếu không trình hủy có thể ném.