NameTest工程中
nametest.cpp
NameTest::NameTest()
{pdata = new privateAB;
}NameTest::~NameTest()
{if (pdata){privateAB *p = (privateAB *)pData; //void *pdata = nullptr;delete p;pdata = nullptr;}
}
内部类:
privateAB
#include "private.h"#include <string>
#include <iostream>privateAB::privateAB()
{std::cout << "NameTest:[privateAB]:privateAB" << std::endl;
}privateAB::~privateAB()
{}
NameTest01工程中
#include "nametest01.h"
#include "private.h"NameTest01::NameTest01()
{pdata = new privateAB; //void *pdata = nullptr;
}NameTest01::~NameTest01()
{if (pdata){privateAB *p = (privateAB *)pData;delete p;pdata = nullptr;}
}
内部类:
privateAB
#include "private.h"#include <string>
#include <iostream>privateAB::privateAB()
{std::cout << "NameTest01:[privateAB]:privateAB" << std::endl;
}privateAB::~privateAB()
{}
以上两个工程是封装成库的,并被下面的程序调用。
#include <QCoreApplication>#include "nametest.h"
#include "nametest01.h"int main(int argc, char *argv[])
{QCoreApplication a(argc, argv);NameTest aa;NameTest01 bb;return a.exec();
}
如上,在两个工程中,有同样的内部类,但是windows上输出的结果和在linux上的输出的结果是不同的。
结果如下:
windows上的:
linux上的:
在linux中,如果出现同样的内部类,虽然是在不同的内部类内使用,但是还是会有问题的,这样就导致了new成功但是没有进入到构造函数中。
当然了,new不成功的情况还是有很多种的。