std::shared_ptr的工作原理

前戏

先抛出两个问题

  • 如果delete一个指针,但是它真实的类型和指针类型不一样会发生什么?
  • 是谁调用了析构函数?

下面这段代码会发生什么有趣的事情?

// delete_diff_type.cpp
#include 

using namespace std;

class Foo
{
public:
    Foo() { cout << "Foo()" << endl; }
    ~Foo() { cout << "~Foo()" << endl; }
};

class FakeFoo
{
public:
    FakeFoo() { cout << "FakeFoo()" << endl; }
    ~FakeFoo() { cout << "~FakeFoo()" << endl; }
};

int main(int argc, const char * argv[]) {
    
    void* vptr = new Foo();
    delete vptr;    // warning
    
//    FakeFoo* ffptr = static_cast(new Foo()); // error
    FakeFoo* ffptr = reinterpret_cast(new Foo());
    delete ffptr;
    
    Foo* fptr = new Foo();
    delete fptr;
    
    return 0

你可能感兴趣的:(c/c++)