찾다

 >  Q&A  >  본문

为什么c++拷贝构造函数一定是传引用?为什么不能是传指针的方式?

值传递会造成死循环。但传指针为什么不行?指针不是是传地址吗,为什么不能用指针?有个博客说传指针也是传值,请问究竟是为什么

ringa_leeringa_lee2767일 전895

모든 응답(3)나는 대답할 것이다

  • 黄舟

    黄舟2017-04-17 13:47:32

    没别的原因,因为用指针传递的话,那写法就太难看了。
    指针传值是相对于实参和形参的传递而言,传递的都是地址的值。

    #include <iostream>
    using namespace std;
    
    class MyClass {
    public:
        MyClass() {
            cout << "constructor called"<<endl;
        }
    
        MyClass(const MyClass &v) {
            cout << "copy constructor called" << endl;
        }
    };
    
    int main() {
        MyClass A;
        MyClass B = A; //这里调用的是拷贝构造函数,写法目前看起来是自然的,用指针写的话,怎么表达这个写法?
        return 0;
    }

    회신하다
    0
  • 伊谢尔伦

    伊谢尔伦2017-04-17 13:47:32

    传指针确实不会造成死循环的问题,但是你得自己实现编译器让它知道发生拷贝操作的时候去调用你写的传指针那个函数。
    指针本身就是一个变量,只不过它的值是另一个变量的地址而已,所以说传指针也是值传递。

    회신하다
    0
  • 高洛峰

    高洛峰2017-04-17 13:47:32

    建议参考深拷贝和浅拷贝的区别

    회신하다
    0
  • 취소회신하다