C++ C++;
我在理解指针函数的某些方面遇到了一些困难。以下是我正在运行的代码:C++ C++;,c++,function,pointers,constructor,ampersand,C++,Function,Pointers,Constructor,Ampersand,我在理解指针函数的某些方面遇到了一些困难。以下是我正在运行的代码: #include <iostream> using namespace std; class Item { public: Item(Item * it) { data = it->data; } Item(int d) { data = d; } void printData() { co
#include <iostream>
using namespace std;
class Item
{
public:
Item(Item * it)
{
data = it->data;
}
Item(int d)
{
data = d;
}
void printData()
{
cout << data << endl;
}
private:
int data;
};
int main()
{
Item i1(79);
Item i2(i1);
i1.printData();
i2.printData();
}
那么,符号和是可选的吗?编译器是否意识到我是想传递一个指针而不是实际对象,并自行处理?我预计在这种情况下会出现编译错误。如果我的代码在不应该工作的时候工作,我会非常沮丧:-)
这是因为它不是调用接受指针的用户定义构造函数,而是调用隐式生成的具有以下签名的复制构造函数:
Item (const Item &);
如果不希望此项有效,可以将其删除(需要C++11):
如果您的编译器不支持C++11,您可以将其声明为私有。如果您不想使用这两个函数,编译器将生成复制构造函数和赋值函数。您需要在类的私有范围中声明它
private:
Item(const Item&);
Item& operator=(const Item&);
Item (const Item &);
Item (const Item &) = delete;
private:
Item(const Item&);
Item& operator=(const Item&);