访问内部私有成员指针时的假设 class
Assumptions when accessing private member pointer inside class
我有一个 class,它包含一个指向结构的私有指针(这是托管的 C++,结构是本机的)。 this 指针指向的对象基本上是在构造函数中创建的,并且一直存在到包含的 class 被处理掉。在 Foo
的构造函数中分配指针后,没有代码将指针重新分配给另一个对象,我不认为将来会有任何代码。
我对与使用智能指针有关的答案不感兴趣,因为我在一些遗留代码中使用了很多原始指针。移植一切都是另一回事,并且正在计划中。
我的问题是:
在 class 中工作时,我可以假设指针的有效性如何?
如果我有几个使用 class 的私有函数...我是否应该在这些函数中取消引用之前始终检查 nullptr
,或者我是否可以假定指针指向一个给定 class 构造方式的有效对象(如果这是本机 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;
}
}
不,您不需要每次都检查它,因为契约(和 C++ 规则)暗示该对象将始终存在于您可以尝试以有效方式访问它的任何时候。
如果它可以重新分配,并且您处于多线程环境中,您可能希望锁定对它的访问。这将是我唯一能想到的问题。
我有一个 class,它包含一个指向结构的私有指针(这是托管的 C++,结构是本机的)。 this 指针指向的对象基本上是在构造函数中创建的,并且一直存在到包含的 class 被处理掉。在 Foo
的构造函数中分配指针后,没有代码将指针重新分配给另一个对象,我不认为将来会有任何代码。
我对与使用智能指针有关的答案不感兴趣,因为我在一些遗留代码中使用了很多原始指针。移植一切都是另一回事,并且正在计划中。
我的问题是:
在 class 中工作时,我可以假设指针的有效性如何?
如果我有几个使用 class 的私有函数...我是否应该在这些函数中取消引用之前始终检查
nullptr
,或者我是否可以假定指针指向一个给定 class 构造方式的有效对象(如果这是本机 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; } }
不,您不需要每次都检查它,因为契约(和 C++ 规则)暗示该对象将始终存在于您可以尝试以有效方式访问它的任何时候。
如果它可以重新分配,并且您处于多线程环境中,您可能希望锁定对它的访问。这将是我唯一能想到的问题。