上面是QT源码,我们应该能看到,QByteArray只是一个栈上的内存,如果直接引用,当超过会导致指针作用域失效
譬如:
QByteArray arry = m_qstring.toUtf8();
char* p = arry.data(); // 这个指针指向栈内存,有野指针的风险
如果在别的地方引用P指针,对导致*p指向的内容会被析构掉,从而失效,这里我们需要让*p指向堆内存
QByteArray arry = m_string.toUtf8();
char *m_pChar = new char[arry.size() + 1];
//这里不能直接拷贝QByteArray ,QByteArray 是一个class,对它拷贝没有意义
memcpy(m_pChar, arry.data(), arry.size());
m_pChar[arry.size()] = '\0'; // 加上结尾符
这个m_pChar在别的地方引用就没有问题,这里需要注意,释放内存