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;
};
และนี่คือวิธีที่คุณจะใช้:
// 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);
ตัวทำลายสำหรับอ็อบเจ็กต์ StringBuffer ชั่วคราวจะถูกเรียกเมื่อใด ใช่ไหม:
- ก่อนที่จะโทรไปที่ GetString?
- หลังจาก GetString กลับมา?
- ขึ้นอยู่กับคอมไพเลอร์?
ฉันรู้ว่า C ++ รับประกันว่าตัวแปรชั่วคราวภายในจะใช้ได้ตราบเท่าที่มีการอ้างอิง - สิ่งนี้ใช้กับออบเจ็กต์หลักเมื่อมีการอ้างอิงถึงตัวแปรสมาชิกหรือไม่
ขอบคุณ.