C++ có cung cấp sự đảm bảo về tuổi thọ của một biến tạm thời được tạo trong một cuộc gọi hàm nhưng không được sử dụng làm tham số? Dưới đây là một lớp dụ:Đảm bảo tuổi thọ tạm thời trong C++?
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ì destructor cho đối tượng StringBuffer tạm thời được gọi là? Có phải là:
- Trước khi gọi đến GetString?
- Sau khi trở về GetString?
- Trình biên dịch phụ thuộc?
Tôi biết rằng C++ đảm bảo rằng biến tạm thời cục bộ sẽ hợp lệ miễn là có tham chiếu đến nó - điều này có áp dụng cho đối tượng cha khi có tham chiếu đến biến thành viên không?
Cảm ơn.
tại sao không kế thừa và quá tải hoặc tạo chức năng toàn cầu? tôi sẽ sạch hơn và bạn sẽ không phải tạo một lớp học để gọi một thành viên. –
Nếu bạn định sử dụng nó, bạn nên gọi 'm_str.reserve (maxlength)' trong 'char * Size (int maxlength)', nếu không thì destructor có thể ném. – Mankarse