一、new/delete
在c++中新增了new/delete关键字,当我们定义了一个类Class Test;时,auto test = new TestNew() 这条语句将会执行Test的构造函数默认构造函数,例如:
class TestNew
{
public:
TestNew()
{
_i = 0;
_c = 0;
std::cout << _i << _c;
}
~TestNew()
{
}
private:
int _i;
float _c;
};
int main()
{
auto test_new = new TestNew();
return 0;
}
实际上 new和delete操作都分为两步,new 操作首先 malloc sizeof(TestNew)大小的内存空间,再去执行TestNew()构造函数。同时delete test_new 操作是先执行~TestNew()操作,再执行free(test_new)操作。 所以导致了一些问题的出现,举例如下:
class TestNew
{
public:
TestNew()
{
_i = new int[10];
_c = 0;
std::cout << "TestNew()" << std::endl;
}
~TestNew()
{
if (_i != nullptr)
{
delete[] _i;
_i = nullptr;