【发布时间】:2016-05-06 14:42:40
【问题描述】:
我有一个关于 C++ 中的析构函数的具体问题。通过代码解释我的要求要容易得多。基本上我想做一些类似(但不完全)的事情:
foo( bar().ptr );
在本例中,指针指向从“bar()”返回的对象内的动态内存。我们可以简单地假设指针是 char* 。我想确保“ptr”指向的数据在“foo()”执行期间存在。现在来充实我在代码中的意思:
foo( char* ptr )
{
// do stuff with *ptr
}
obj bar()
{
obj thing;
return thing;
}
struct obj
{
char* ptr;
obj()
{
ptr = new char[1];
}
~obj()
{
delete[] ptr;
}
};
现在这可以在没有完全优化的 Visual Studio 中使用。我很偏执,但希望对此有 100% 的信心。此代码还需要在 Linux 上运行(使用 gcc 编译)。严格 x86。
这有点微妙,所以我想我会问一下这种行为是否是标准的。似乎编译器会想要确保它能够正常工作。
谢谢!
【问题讨论】:
标签: c++ destructor temporary stack-frame