访问内部私有成员指针时的假设 class

Assumptions when accessing private member pointer inside class

我有一个 class,它包含一个指向结构的私有指针(这是托管的 C++,结构是本机的)。 this 指针指向的对象基本上是在构造函数中创建的,并且一直存在到包含的 class 被处理掉。在 Foo 的构造函数中分配指针后,没有代码将指针重新分配给另一个对象,我不认为将来会有任何代码。

我对与使用智能指针有关的答案不感兴趣,因为我在一些遗留代码中使用了很多原始指针。移植一切都是另一回事,并且正在计划中。

我的问题是:

  1. 在 class 中工作时,我可以假设指针的有效性如何?

  2. 如果我有几个使用 class 的私有函数...我是否应该在这些函数中取消引用之前始终检查 nullptr,或者我是否可以假定指针指向一个给定 class 构造方式的有效对象(如果这是本机 C++,我只会将指针设为实际对象以使其消失)?

  3. 有没有更好的方法可以做到这一点而不涉及为 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++ 规则)暗示该对象将始终存在于您可以尝试以有效方式访问它的任何时候。

如果它可以重新分配,并且您处于多线程环境中,您可能希望锁定对它的访问。这将是我唯一能想到的问题。