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不成功的情况还是有很多种的。