I am testing shared_ptrs and QStrings and I am having a crash which I don't fully understand. Here is the code:
#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();
}
Why does this crash? I am using shared_ptrs so after the assignment reference counter should get incremented.
Thanks in advance
d2 points to the same object as d1, you delete object and then try call its method (after deleting)