将对象传递给函数不会导致构造函数调用

时间:2017-06-02 05:37:46

标签: c++ function for-loop constructor

当我在下面的代码中调用f1时,是否应该调用构造函数? 我看到"这个"指针在对象b(param到f1)中是不同的,这意味着创建了一个新对象,但是我没有在构造函数中看到b的打印。 但是有人要求析构函数,任何人都可以解释一下吗?

class A
{
    int k ;
public:
    A(int i)
    {
        k=i;
        printf("%d inside [%s]ptr[%p]\n",k,__FUNCTION__,this);
    }
    ~A()
    {
        printf("%d inside [%s]ptr[%p]\n",k,__FUNCTION__,this);
    }
    void A_fn()
    {
        printf("%d inside [%s]ptr[%p]\n",k,__FUNCTION__,this);
    }
};
void f1(A b)
{
    b.A_fn();
}
int _tmain(int argc, _TCHAR* argv[])
{
    A a(10);
    f1(a);
    return 0;
}

vc ++ 2012中显示的输出:

10 inside [A::A]ptr[00B3FBD0]

10 inside [A::A_fn]ptr[00B3FAEC]

10 inside [A::~A]ptr[00B3FAEC]

10 inside [A::~A]ptr[00B3FBD0]

Press any key to continue . . .

2 个答案:

答案 0 :(得分:2)

因为当您按值传递对象时,该对象将被复制,因此将调用复制构造函数。

答案 1 :(得分:0)

正如已经指出的那样,你需要在A类中添加一个复制构造函数。它的外观如下:

A(const A&)
{
    printf("Inside copy constructor\n");
}