gpt4 book ai didi

c++ - 是否有任何自动化的方法来实现后构造函数和预析构函数调用虚拟方法?

转载 作者:可可西里 更新时间:2023-11-01 14:59:51 25 4
gpt4 key购买 nike

由于从构造函数和析构函数内部调用虚方法的众所周知的问题,我通常最终得到的类需要在构造函数之后调用最终设置方法,并调用预拆卸方法在它们的析构函数之前,像这样:

MyObject * obj = new MyObject;
obj->Initialize(); // virtual method call, required after ctor for (obj) to run properly
[...]
obj->AboutToDelete(); // virtual method call, required before dtor for (obj) to clean up properly
delete obj;

这行得通,但它带来了调用者忘记在适当的时间调用其中一个或两个方法的风险。

所以问题是:在 C++ 中有没有什么方法可以自动调用这些方法,这样调用者就不必记得调用它们了? (我猜没有,但我想我还是会问,以防万一有一些聪明的方法来做到这一点)

最佳答案

虽然没有自动化的方法,但您可以通过拒绝用户访问该类型的析构函数并声明特殊的删除方法来强制用户动手。在这种方法中,您可以进行您想要的虚拟调用。创建可以采用与静态工厂方法类似的方法。

class MyObject {
...
public:
static MyObject* Create() {
MyObject* pObject = new MyObject();
pObject->Initialize();
return pObject;
}
Delete() {
this->AboutToDelete();
delete this;
}
private:
MyObject() { ... }
virtual ~MyObject() { ... }
};

现在不能调用“delete obj;”除非调用站点可以访问 MyObject 私有(private)成员。

关于c++ - 是否有任何自动化的方法来实现后构造函数和预析构函数调用虚拟方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1151787/

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