我正在开发一个 JavaFX 应用程序并尝试遵循模型-视图-控制器模式。我已经用普通的 java 对象(双精度、整数、字符串...)实现了模型,认为我会在非 JavaFX 项目中重用该模型。然而,我发现在没有属性的情况下,当模型发生变化时,很难使视图自动更新。在将每个变量更改为属性之前,我想问一下仅使用 JavaFX 属性来实现模型是否正确。
在 C++ 中,在对象销毁时,派生类析构函数在基类析构函数之前调用。派生类销毁时是否可以自动通知基类(即调用基类的成员函数)?
我可以在派生类析构函数中手动调用基类通知函数,但用户必须始终记住在从基类继承时添加该行,这是我想避免的。
我正在构建一个多线程框架,从两个不同的线程(主线程和生产者线程)访问MyObject从类继承的类的对象。GeneralObject
当对象在主线程中被析构时,将调用 的析构函数,MyObject然后该类的析构函数将其自身从存储GeneralObject多态对象的所有“有效”指针的有效对象表中删除。GeneralObject这会阻止生产者线程访问不再存在的对象。
问题在于,在析构函数调用MyObject和析构函数调用之间的短暂时间内GeneralObject,存储在 valid-object-table 中的指针变成了悬空指针。它当然会在GeneralObject析构函数中被删除,但由于生产者线程可能会尝试在这段短时间内访问该对象,因此这是不安全的。我需要的函数将其自身从表中删除,以便在的销毁GeneralObject时调用。MyObject
正如@user17732522在评论中指出的,当MyObject进入 的析构函数时,指针已经无效,这使得我的方法不安全。我采用了 @HolyBlackCat 的解决方案,其中包装对象在MyObject调用 的析构函数之前在其销毁时MyObject调用 的指针删除函数。