返回对象的实例并通过句柄使用它

Returning an instance of an object and using it via handle

本文关键字:句柄 对象 实例 返回      更新时间:2023-10-16

我最近一直在玩一些代码,我一直对一件事感到好奇,我不确定我是否找到了正确的答案。因此,让我们假设我已经定义了以下类。

class Thing {
public:
    int m_Integer = 0;
    Thing() {
        std::cout << "Thing constructor has been called! Address: " << this << ".n ";
    }
    ~Thing() noexcept {
        std::cout << "Thing destructor has been called! Address: " << this << ".n";
    }
    static Thing CreateInstance() {
        return Thing();
    }
    void* GetThis() {
        return this;
    }
};

我已经明确定义了默认的 ctor 和 dtor,以查看它们是否被调用。好的,那么,我创建了一个句柄。

void* hThing = Thing::CreateInstance().GetThis();

日志告诉我构造函数和析构函数都被调用了。这是否意味着我已经在堆栈上分配了一些内存,该内存具有类似于事物类型对象的布局,但对象本身已不复存在?

Thing::CreateInstance()返回一个本地对象,GetThis()后,该对象将被系统自动销毁(调用析构函数(。您得到的hThing是意外的地址值。指向空间已被系统从堆栈中释放出来,并且可以随时修改该值。