gpt4 book ai didi

c++ - 具有未在堆上分配的对象的 AutoPointer

转载 作者:太空狗 更新时间:2023-10-29 19:53:51 26 4
gpt4 key购买 nike

一旦超出范围,自动指针会在其指向的对象上内部调用 delete。如果我们分配一个在堆上创建的对象,这就可以正常工作。但是如果我尝试分配一个不是在堆上创建的对象,它会崩溃,因为 delete 被调用了两次。首先是 auto_ptr 本身,其次是当对象超出范围时再次调用其析构函数。如下图,

#include <iostream>
#include <memory>

using namespace std;

class sample
{
public:
sample() { puts("sample"); }
~sample() { puts("~sample"); }
};

int main()
{
sample sObj;
auto_ptr<sample> samplePtr(&sObj);
}

这是否意味着我们可以使用 auto_ptr 来仅保存在堆上创建的对象?

最佳答案

是的,确切地说,您只能将 auto_ptr 用于堆分配的对象。技术原因是 auto_ptr 析构函数调用 delete 并且对未在堆上分配的对象调用 delete未定义的行为使堆崩溃,多次运行析构函数,以及您不应该指望也不应该推测的任何其他事情。

关于c++ - 具有未在堆上分配的对象的 AutoPointer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10617749/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com