C++:delete不完整类型的指针

  • 时间:
  • 浏览:0

这名析构函数的位置在哪呢?C++标准里说会把自动生成的类成员函数贴到 类的定义中,没有 但是在test.h中。

没有 自动生成的析构函数长哪几种样子呢?至少 是:

和前面说的warning信息全版一致,看起来也是在调用delete时出的间题。但哪里调用了delete呢?

};

在GCC4.1.2下,编译出错信息是:

在不选择这两件事情的情形下,编译器不能按最普通的最好的法律措施去避免delete x

这是不可能 在foo里,编译器看不能X的全版类型,没最好的法律措施选择两件事情:

void A::Func() {

以下代码编译后要 有warning:

A::A(): mImpl(new Impl) {}

A::~A() {}

class A {

};

}

间题清楚了:当当我们当当我们当当我们当当我们当当我们当当我们儿在编译main.cpp时,看不能A::Impl的全版定义,但却5个 自动生成的A::~A,其中delete了5个 不全版的类对象!

// test.h

展开了基本但是一句delete

private:

5个 当当我们当当我们当当我们当当我们当当我们当当我们儿平常会遇到的场景,就会触发上面这名间题。

上面的代码中,当当我们当当我们当当我们当当我们当当我们当当我们儿没有 给class A手动写5个 析构函数,不可能 编译器自动生成的析构函数但是当当我们当当我们当当我们当当我们当当我们当当我们儿要的:析构时把mImpl析构掉。

class A::Impl {

public:

看起来很正常,但编译时有warning:

public:

// test.cpp

答案是std::auto_ptr

手动写5个 A的析构函数,位置要在能都看A::Impl全版定义的地方,也但是test.cpp:

以下是由5个 文件组成的5个 工程,其中用到了'pImpl'最好的法律措施来隐藏实现,而且 在接口类贴到 了5个 std::auto_ptr,很简单: