我有一个包含指向结构的私有指针的类(这是托管C ++,结构是本机的)。这个指针指向的对象基本上是在构造函数中创建的,直到包含的类被处理掉。在Foo
的构造函数中指定另一个对象后,没有代码将指针重新指定给另一个对象,我不认为将来会有任何对象。
我对使用智能指针的答案不感兴趣,因为我在一些遗留代码中使用了很多原始指针。将一切都移植到另一个问题上并且正在计划中。
我的问题是:
在有效性方面,我在课堂上工作时能指出什么?
如果我有几个使用该类的私有函数...我应该在这些函数中取消引用之前检查nullptr
,还是可以假设指针指向一个有效的对象这个类是构造的(如果这是本机C ++,我只是将指针作为一个实际的对象来使它消失)?
执行此操作的更好方法是不涉及为SomeStructType
或智能指针创建另一个托管包装器?
public ref class Foo
{
private:
SomeStructType* pMyStruct;
void Initialize()
{
pMyStruct = new SomeStructType();
}
void DoSomethingElse1(); //Uses pMyStruct
void DoSomethingElse2(); //Uses pMyStruct
public:
void DoSomething(); //Uses pMyStruct or calls private func that does
Foo()
{
Initialize();
}
~Foo()
{
delete pMyStruct;
}
}
答案 0 :(得分:0)
不,你不需要每次都检查它,因为契约(和C ++的规则)暗示对象将始终存在于你可以尝试以有效方式访问它的任何点。
如果可以重新分配,并且您处于多线程环境中,则可能需要锁定对它的访问权限。这将是我能想到的唯一问题。