在过去的 45 分钟内试图解决这个问题,但无法弄清楚我应该做什么。这是问题。
class C; //forward declaration
class Cpointer {
public:
};
class C { //do not modify
int i;
public:
C(int _i=0) : i(_i) {}
Cpointer operator& () { return Cpointer(this); }
void Do() { std::cout << "i=" << i << std::endl; }
};
int main() {
Cpointer p (new C(100));
p->Do();
}
完成类 Cpointer 以便代码编译。确保没有内存泄漏。
据我了解,CPointer 类将 C 类作为构造函数的参数。 当我尝试下面的代码时,我收到一个编译器错误提示 CPointer 的 Do 函数中的“使用未定义类型 C”。
class Cpointer
{
C* mCptr;
public:
Cpointer(C* cptr) : mCptr(cptr){}
void Do()
{
//mCptr->Do();
}
};
最佳答案
我对发布解决方案感到有些不安,但既然你说这不是作业......这里是:
class Cpointer {
C* ptr;
public:
Cpointer(C* c) : ptr(c) { }
~Cpointer() { delete ptr; }
C* operator->() { return ptr; }
};
这里有三点:
- 获取
C*
指针并将其存储在临时提供的类指针类中的构造函数。 - 当
p
超出main
函数的范围时,用于删除堆分配对象C
的析构函数。 - 重载
->
运算符,以便p->Do();
将正确调用C::Do
方法。
基本上,要求您实现的是标准 auto_ptr
类的部分功能。
关于C++ 指针和类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6802757/