我正在设计一个软件工具,其中有一个内存模型,API 用户可以获取模型的对象、查询它们并设置值。
由于模型的所有对象都属于一个模型,并且大部分操作都必须记录和测试等,因此每个创建的对象都必须注册到该Model
对象中。Model
存储所有对象,因为std::unique_ptr
它是它们的唯一所有者。需要时,它会将原始指针传递给用户。
让我担心的是用户调用delete
这些指针的可能性。但如果我使用std::shared_ptr
,用户仍然可以使用get()
和调用delete
它。所以也不是很安全。
我想到的另一个选择是通过名称字符串引用对象,或者传递 ObjectReference 对象而不是真实对象,然后可以销毁这些 ObjectReferences 而不会影响实际存储的对象。
这些引用的工作有点像客户端:您告诉他们要做什么,然后他们将请求转发给实际对象。这对开发人员来说是很多额外的工作,但它保护了指针。
我应该担心指针吗?到目前为止,我一直在使用智能指针,但现在我需要以某种方式允许用户访问由中心模型管理的对象,而不允许用户删除它们。
[嗯...也许将析构函数设为私有,并让只有 unique_ptr 可以通过 Deleter 访问它?]