程序在访问shared_ptr持有QString时崩溃
Program crashing when accessing shared_ptr holding QString
我正在测试shared_ptrs和QStrings,但我遇到了一个我不完全理解的崩溃。这是代码:
#include <QCoreApplication>
#include <QString>
#include <iostream>
class Base {
public:
Base(const QString& str1, const QString& str2, const QString& str3) {
member1_ = std::make_shared<Internal>();
(*member1_).i1 = str1;
(*member1_).i2 = str2;
member2_ = std::make_shared<QString>(str3);
}
QString getMember() { return *member2_; }
QString getInternalMember() { return (*member1_).i1; }
protected:
Base(const Base&) = default;
Base& operator=(const Base&) = default;
Base(Base&&) = default;
Base& operator=(Base&&) = default;
private:
struct Internal {
QString i1;
QString i2;
};
std::shared_ptr<Internal> member1_;
std::shared_ptr<QString> member2_;
};
class Derived : public Base {
public:
Derived(const QString& str1, const QString& str2, const QString& str3) : Base(str1, str2, str3) {
derivedMember_ = 1;
}
private:
int derivedMember_;
};
int main(int argc, char *argv[]) {
QCoreApplication a(argc, argv);
Derived* d1 = new Derived("param1", "param2", "param3");
std::cout << "d1 created " << d1->getMember().toStdString() << "-" << d1->getInternalMember().toStdString() << std::endl;
Derived* d2 = d1;
delete d1;
std::cout << "d2 created " << d2->getMember().toStdString() << "-" << d2->getInternalMember().toStdString() << std::endl;
return a.exec();
}
为什么会崩溃?我正在使用shared_ptrs所以在分配参考计数器应该增加之后。
提前致谢
d2 指向与 d1 相同的对象,您删除对象,然后尝试调用其方法(删除后(
相关文章:
- 将 Qvector<uint8_t> 转换为 QString
- 'short int'持有的值溢出,但"自动"不会溢出?
- 如何通过按下第三个窗口中的按钮,将QString从一个窗口获取到另一个窗口
- QStringList vs list<shared_ptr<QString>> 性能比较C++
- 将 hh:mm:ss.zzz 时间 QString 转换为毫秒的单行函数?
- Qt C++ 如何在 1 个命令中砍掉属于 QStringList 成员的 QString 字母
- 为什么使用 QString::right 在字符串开头省略逗号?
- Qt:更新 QString 时自动生成的代码失败
- 如何将 QString 的 QList 分配给列表视图?
- 加倍到 QString 并保存在 QJsonDocument 中
- 如何将包含指数的 QString 转换为C++中的双倍?
- 是否可以直接将QString输入(例如)googletest的ADD_FAILURE()宏?
- 如何从 QString 中包含的十六进制值中获取 ASCII 字符?
- 将 QAction 的 QString 文本作为参数传递
- 如何在精灵表上的两个不同部分之间来回切换,同时用户仍使用 SFML 持有密钥
- 如何计算QString开头的重复字符?
- 将 nullptr QVariant 与空 QString 进行比较,在 Qt5.9 和 Qt5.12 中给出了不同的输
- 在Qt-cpp中通过像素获取QString的子字符串
- 删除unicode def后,无法将QString转换为TCHAR
- 程序在访问shared_ptr持有QString时崩溃