【发布时间】:2017-02-19 21:15:56
【问题描述】:
我有一个类,它包含一个指向结构的私有指针(这是托管的 C++,结构是本机的)。这个指针指向的对象基本上是在构造函数中创建的,并且一直存在到包含的类被释放为止。一旦在Foo 的构造函数中分配了指针,就没有代码可以将指针重新分配给另一个对象,而且我不认为将来会有任何代码。
我对与使用智能指针有关的答案不感兴趣,因为我在一些遗留代码中使用了大量原始指针。移植所有内容是另一回事,并且正在计划中。
我的问题是:
就有效性而言,在课堂上工作时,我可以假设指针是什么?
1234563是构造的(如果这是本机 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++ 扩展,但在 Plain Jane C++ 中,您的示例将很快与 Rule of Three 发生冲突。
-
@user4581301 1. 我同意“三法则”的评论。我还没有走得那么远(我将如何重构课程),但是 2. 我重新措辞了那句话。真的,我只是说指针在构造函数中分配并在析构函数中删除。除了访问它指向的对象之外,没有其他任何计划。
标签: c++ pointers managed-c++