C++中构造函数和析构函数能不能被显示调用

 我来答
匿名用户
推荐于2018-04-13
展开全部

1、    C++中, 构造函数和析构函数可以被显示调用. 显示调用默认构造函数的语法: a.A::A();(不能写成a.A();) , 显示调用非默认构造函数的语法: a.A::A(7);(不能写成a.A(7);); 显示调用析构函数的语法: a.A::~A();(可以写成a.~A();) .
2、    显示调用构造函数和析构函数就像调用一般的函数一样, 并不意味着创建或销毁对象;
3、    如果构造函数中动态分配了空间, 则显示调用构造函数会造成内存泄露. 创建对象时的隐式构造函数调用已经为对象分配了动态内存,当用创建好的对象显示调用构造函数时, 对象指向的动态内存更新为显示调用时所分配的, 对象生命周期结束时析构函数所释放掉的是后一次分配的动态内存, 也就是说创建对象时隐式构造函数调用所分配的那块内存泄漏了.
4、    如果析构函数中释放动态分配的空间, 则会造成多次释放同一内存, 会出现严重错误.

    #include <iostream>  
    using namespace std;  
    class A  
    {  
    public:  
        A()  
        {  
            cout << "Default constructor is called./r/n";  
        }  
        A(int ix)  
        {  
            cout << "Another constructor is called./r/n";  
        }  
        ~A()  
        {  
            cout << "Destructor is called./r/n";  
        }  
    };  
    int main()  
    {  
        A a1;          // <1>  
        a1.A::A();     // <2> 显示调用默认构造函数(写成a1.A()会报错)  
        a1.A::A(7);    // <3> 显示调用非默认构造函数(写成a1.A(7)会报错)  
        a1.A::~A();    // <4> 显示调用析构函数, 但是此时对象a1并没有销毁(写成a1.~A()不会报错)  
        // A a2();     // 这样写没报错, 但也没调用任何构造函数和析构函数.  
        A a3 = A();    // <5> 完整写法: A a3 = A::A();  
        A a4(77);      // <6>  
        A a5 = A(777); // <7> 完整写法: A a5 = A::A(777);  
        return 0;// <8>, <9>, <10>, <11> return语句之后, 右括号之前析构函数被隐式调用. a1, a3, a4, a5对象在这里被销毁.  
    }
节子不哭
推荐于2017-07-12 · TA获得超过461个赞
知道小有建树答主
回答量:340
采纳率:85%
帮助的人:165万
展开全部
构造函数和析构函数都是系统自动调用的,为什么要显示调用呢,显示调用也没啥用啊,用一个已经存在的对象调用构造函数,把这个已经存在的对象再创建一次? 没有意义啊,所以不可以这样做。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
我乃L22
2017-10-16
知道答主
回答量:2
采纳率:0%
帮助的人:1733
展开全部
可以这样简单的理解。将参数放在括号内(有参构造函数)为显示调用,用"="赋值为隐式调用(拷贝构造函数也是一样,存在显式和隐式的调用,规则一样)。有些实现好的类在构造函数前面会加expilict关键字修饰,来禁止隐式调用。向前面那个回答说什么系统会默认调用构造函数那不是废话吗,肯定定义对象的时候就自动调用了啊。差不多就这样,详细专业地解释可以自己看教材或者别人的博客。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2017-01-20
展开全部
构造可以根据参数指定调用,,,,,析构没有

~~~
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2018-04-13
展开全部

include 'config.php';
if (!file_exists('install.lock')) {
header("HTTP/1.1 200 Moved Permanently");
header("Location: /install.php");
exit();
}

此类事物有几种:

最推荐的一种:

推荐理由:

  1.  
  2.  
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式