临时对象的生命周期
Lifetime of temporary objects
我遇到了以下代码(大致):
struct StringBuffer {
StringBuffer(const char* string) {strcpy(m_buffer, string);}
const char* c_str() const {return m_buffer;}
char m_buffer[128];
};
std::string foobar() {
const char* buffer = StringBuffer("Hello World").c_str();
return std::string(buffer);
}
我假设在
行之后: const char* buffer = StringBuffer("Hello World").c_str();
buffer
是指向一个指针在解构的StringBuffer
对象?
最后回答你的问题,是的,buffer
将是一个偏离的指针。
要回答关于临时值的生命周期的更一般的问题,我建议您阅读下面的参考:
…所有临时变量在(词法上)包含创建它们的点的完整表达式求值的最后一步被销毁…
对于您的情况,这意味着一旦对buffer
的赋值完成,临时对象将被销毁。
可以。
按照惯例,像std::string::c_str()这样的函数不是用来缓存的,因为即使它指向一个非临时对象,它也可以通过重新分配它所指向的字符串而失效。
相关文章:
- 如何在共享库的整个生命周期内存储数据
- 如何理解句子的生命周期始于对e的评估
- 它解决了什么问题,对于非真空初始化,生命周期在初始化之前就开始了
- Go/C++gRPC客户端通道和存根生命周期
- 如何将"this"的生命周期移动到C++中的另一个对象中?
- 是否可以通过使用移动/交换 c++11 来延长返回的临时变量的生命周期
- 使用对象的生命周期作为设置器的安全性
- 临时人员的生命周期传递给函数
- 我想知道在构造函数中初始化变量时的生命周期
- Lua 用户数据生命周期管理
- 如何使用 epoll(void* event.data.ptr) 管理 Connection 的生命周期
- C++引用的生命周期
- 在堆栈上有一个对象,而不是在函数的整个生命周期内
- 在 Boost ASIO 服务器中处理生命周期
- C++ lambda 生命周期
- 使用互斥锁跟踪另一个应用的生命周期
- QSharedPointer 或 std::shared_ptr 的生命周期
- 来自async_resolve的 boost::asio::ip::tcp::resolver::iterator 的生命周期是多久?
- 如何调整属于类的唯一指针的字符数组的大小.它必须在程序的整个生命周期中保持活力
- 延长 std::tuple<int&,int> 的生命周期,方法是将其分配给 const std::tuple<int, int>&