我有一個類,其中包含一個私人指針結構(這是託管的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; } }
推薦重新說明「在指針被重新分配而沒有另一個包含類實例被創建的情況下,不應該有任何實例」,因爲我可以閱讀這三種不同的方式,可能它們都是錯誤的。 – user4581301
我不知道我託管的C++擴展,但在Plain Jane C++中,您的示例將快速違反[Rule of Three](http://stackoverflow.com/questions/4172722/what-is-the-rule-的三)。 – user4581301
@ user4581301 1.我同意「三個規則」的評論。我還沒有那麼遠(我將如何重構課程),但是2.我重新措辭了這句話。真的,我只是說指針在構造函數中被賦值並在析構函數中被刪除。除了訪問它指向的對象之外,沒有別的計劃。 – user2079828