I am new to code in C++. So, below code looks pretty decent to me.
#include<iostream>
using namespace std;
class B {};
class A {
    public: 
    B* b;
    A() {
        cout << "ctor" << endl;
        b = new B();
    }
    ~A() {
        cout << "dtor" << endl;
        delete b;
    }
};
void func(A a) {
    cout << a.b << endl;
}
int main() {
    A a;
    cout << a.b << endl;
    func(a);
    cout << a.b << endl;
}
But I found an issue with this code. When I run this, it gives free(): double free detected in tcache 2 error. I know the cause of this error (it is because dtor is being called 2 times).
One way to solve the problem is, writing a copy constructor for class A where, I create a new B() like this.
A(A const& a) {
    cout << "copy ctor" << endl;
    b = new B();
    *b = *a.b;
}
But if B is a very big class, and hence if I prefer to share b pointer, then how would I avoid this problem?
