相关疑难解决方法(0)

"空"构造函数或析构函数是否会与生成的构造函数或析构函数执行相同的操作?

假设我们有一个(玩具)C++类,如下所示:

class Foo {
    public:
        Foo();
    private:
        int t;
};
Run Code Online (Sandbox Code Playgroud)

由于没有定义析构函数,因此C++编译器应该自动为类创建一个析构函数Foo.如果析构函数不需要清理任何动态分配的内存(也就是说,我们可以合理地依赖编译器给我们的析构函数),那么将定义一个空的析构函数,即.

Foo::~Foo() { }
Run Code Online (Sandbox Code Playgroud)

做与编译器生成的一样的事情?那个空构造函数怎么样 - 也就是说,Foo::Foo() { }

如果存在差异,它们存在于何处?如果没有,一种方法优于另一种方法吗?

c++ oop constructor destructor class

72
推荐指数
4
解决办法
3万
查看次数

前方声明不会做

下面是代码的两个片段(准备编译).在第一个片段中,我只使用结构的前向声明,同时从Guest类删除指向此结构的指针,不调用Guest类.
在第二个片段中,而不是前向声明我使用基本工作中的删除使用此Guest类的完整定义.
为什么?为什么会有所作为?是不是前向声明假设只是编译器的一个注释,说这个类/结构的定义在其他地方?
我很惊讶它只是不直观地工作.

//First just forward dclr  
#include "stdafx.h"
#include <iostream>
using std::cout;

struct Guest;

struct Base
{
    Guest* ptr_;
    Base(Guest* ptr):ptr_(ptr)
    {
        cout << "Base\n";
    }
    ~Base()
    {
        cout << "~Base\n";
        delete ptr_;
    }
};

struct Guest
{
    Guest()
    {
        cout << "Guest\n";
        throw std::exception();
    }
    Guest(int)
    {
        cout << "Guest(int)\n";
    }
    ~Guest()
    {
        cout << "~Guest\n";
    }
};

struct MyClass : Base
{
    Guest g;
    MyClass(Guest* g):Base(g)
    {
        cout << "MyClass\n";

    }
    ~MyClass()
    {
        cout << "~MyClass\n"; …
Run Code Online (Sandbox Code Playgroud)

c++ forward-declaration

6
推荐指数
2
解决办法
3887
查看次数

标签 统计

c++ ×2

class ×1

constructor ×1

destructor ×1

forward-declaration ×1

oop ×1