I have such code like,
#include <iostream>
#include <string>
using namespace std;
class Heart {
private:
    int bpm;
public:
    Heart(int bpm) : bpm(bpm) {}
    int getBPM() {
        return bpm;
    }
};
class Kidney {
private:
    double PercentFunction;
public:
    Kidney() : PercentFunction(0) {}
    Kidney(double pf) : PercentFunction(pf) {}
    double getPF() {
        return PercentFunction;
    }
};
class Person {
private:
    string fname, lname;
    int age;
    Heart h;
    Kidney* k; 
public:
    Person(string fn, string ln, int age, int bpm, double kpf1, double kpf2) : fname(fn), lname(ln), age(age), h(bpm) {
        k = new Kidney[2];
        k[0] = Kidney(kpf1);
        k[1] = Kidney(kpf2);
        cout << fname << " " << lname << ", aged " << age << ". Heart BPM : " << bpm <<
            ". Kidneys' percent function indices: " << k[0].getPF() << " and " << k[1].getPF() << '.' << endl;
    }
    ~Person() {
        cout << "A person is dying!" << endl;
        delete[] k;
    }
};
int main() {
    Person p = Person("Jack", "Bowen", 24, 60, 0.99, 0.98);
}
Then I run my code, an error(Debug Assertion Failed!) pops up. And you can also see the destructor is called twice. But if I remove the delete [] k; in the ~Person, there will be no such pop-up error.
There is dynamic allocation in the Person constructor:
k = new Kidney[2];
k[0] = Kidney(kpf1);
k[1] = Kidney(kpf2);
So I think I should delete k in the destructor. My question is why the destructor is called twice and how to solve the error?
I am using VS 2013.
Thank you!
 
     
     
    