访问私人会员指针的假设

Assumptions when accessing private member pointer inside class

本文关键字:指针 假设 访问      更新时间:2023-10-16

我有一个包含私人指针指向struct的类(这是托管的C ,结构是本地的)。该指针指出的对象基本上是在构造函数中创建的,并活着直到含有类别的类别。一旦在Foo的构造函数中分配了另一个对象,就没有代码将指针重新分配给另一个对象,并且我不设想将来会有任何对象。

我对与使用智能指针有关的答案不感兴趣,因为我在某些旧代码中使用了许多原始指针。将所有内容移植是另一回事,并且正在计划。

我的问题是:

  1. 在有效性方面,在班级工作时,我该对指针有什么想法?

  2. 如果我有几个使用该类的私人功能...我应该始终检查这些功能之前的nullptr,或者我可以假设指针指向一个有效的对象,给定构造类的方式的有效对象(如果这是本机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 规则)意味着该对象始终存在于您可以尝试访问的任何时候有效的方法。

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