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










