2012-03-09 177 views
1

有没有办法让我的自定义类只能通过引用传递?C++类只能通过引用传递

基本上,我有以下类:

class A{ 
private: 
    int _x; 
public: 
    A(int y){ 
    _x = y; 
    } 
}; 

我能让它的地方,我只能通过引用传递吗?否则它会引发编译时错误?

+2

是的,使其复制构造函数是私人的。 – 2012-03-09 20:41:38

回答

3

有几个人建议使复制构造函数为私有。这是一个主要是很好的解决方案,但它不完整。它仍然允许类型本身无意中通过价值传递自己。更彻底的解决方案是将复制构造函数声明为私有,然后再不实现它。

class A{ 
private: 
    // Prevent value copying 
    A(const A&); 

    int _x; 
public: 
    A(int y){ 
    _x = y; 
    } 
}; 

注:由于@DeadMG指出,在C++ 11使用delete是优选的。

A(const A&) = delete; 
+0

我从来没有建议*实现复制构造函数。 – Puppy 2012-03-10 00:36:47

10

您可以通过将复制构造函数声明为私有(或在C++ 11中删除)来防止复制。

+1

或者在pre-C++ 11中继承'boost :: noncopyable'。 – 2012-03-09 21:02:17

2

是声明拷贝构造函数私有的(但仍实现它)允许友元函数或友元类仍然使用私有函数/类的成员,因此,拷贝构造函数仍然可以访问。这就是为什么你声明它是私人的,不执行它。

+0

+1提友。 – innochenti 2012-03-09 21:35:08