У меня есть класс, который содержит частный указатель на struct (это управляемый 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++ ваш пример быстро запустит [Правило трех] (http://stackoverflow.com/questions/4172722/what-is-the-ru- из-три). – user4581301
@ user4581301 1. Я согласен с комментарием «Правило трех». У меня не так много (в том, как я собираюсь реорганизовать класс), но 2. Я переформулировал это предложение. На самом деле я просто говорю, что указатель назначается в конструкторе и удаляется в деструкторе. Никаких планов ни на что другое, кроме доступа к объекту, на который он указывает. – user2079828