你看到这个C++代码有什么问题吗?

Vij*_*jay 1 c++ destructor

#include<iostream>
#include<conio.h>
using namespace std;
class A
{
public:
       int *p;      
A()
{
   p =new int;
}

~A()
{
delete p;   //Is this what i am doing is correct?
cout << "in A's destructor"<<endl;
}

};

int main()
{
A *obj=new A;
delete obj;    
getch();
}
Run Code Online (Sandbox Code Playgroud)

这个程序,我已经在Dev c ++中执行并编译并执行正常.但我怀疑这不好.特别是在我说的析构函数中 delete P

我错了吗?

sha*_*oth 11

该代码在逻辑上很好(有new/ delete你问的部分),但在其他方面设计得很糟糕.

首先,如果class A拥有堆分配int(intclass A对象生存一样长寿),创建它没有意义,new将它作为成员变量更有效率class A.其次,你不应该这样做public- 打破封装并允许大量滥用.

最后,您仍然允许复制构造函数和赋值运算符,并且未实现,因此每次复制类对象时都会得到浅复制.您应该适当地实施它们或禁止它们.

然而,delete分配变量的部分new完全没问题.