সি ++ একটি অস্থায়ী পরিবর্তনশীল যা প্যারামিটার হিসাবে ব্যবহার না করে একটি অস্থায়ী পরিবর্তনশীলের আজীবন গ্যারান্টি সরবরাহ করে? এখানে একটি উদাহরণ বর্গ:
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);
অস্থায়ী স্ট্রিংবাফার অবজেক্টের জন্য ডেস্ট্রাক্টরকে কখন ডাকা হবে? তাই কি:
- গেটস্ট্রিংয়ের কল করার আগে?
- গেটস্ট্রিং রিটার্নের পরে?
- সংকলক নির্ভর?
আমি জানি যে সি ++ গ্যারান্টি দেয় যে কোনও স্থানীয় অস্থায়ী পরিবর্তনশীল যতক্ষণ তার রেফারেন্স রয়েছে ততক্ষণ বৈধ হবে - যখন কোনও সদস্যের ভেরিয়েবলের রেফারেন্স থাকে তখন পিতামাতাদের জন্য এটি প্রয়োগ হয়?
ধন্যবাদ।
m_str.reserve(maxlength)মধ্যে char * Size(int maxlength), অন্যথায় বিনাশকারী নিক্ষেপ পারে।