定义一个对象有什么区别;s成员的值、指针或引用



我刚接触C++,对有些困惑

我要定义一个类,什么时候应该给成员定义一个指针?或者我应该在什么时候为成员定义一个值?或者我什么时候应该把它定义为一个参考?

当我读到TCPL 24.3.3这本书时,我感到困惑的是上面说"当在"包含"对象的生命周期内需要更改指向"包含"的指针时,应使用指针解决方案。例如:

class C
{
    int a;
public:
    C(int i):a(i){};
};
class C2
{
    C a;
    C *p;
public:
    C2(int i):a(i), p(new C(i)){};
    ~C2(){delete p;}
    C ChangeValue(C c)
    {
        C temp = a;
        a = c;
        return temp;
    }
    C* ChangePointer(C *c)
    {
        C* temp = p;
        p = c;
        return temp;
    }
};

我认为使用valus作为班级成员没有区别。。。。

请帮我完成以下操作:)

考虑指针的最佳方式是"浅拷贝"与"深拷贝"。当我处理一个特定的对象时,当我把它传递到不同的作用域(不同的函数或类)时,它会被复制吗?如果我不想复制它,我应该使用指针,否则我可以将它声明为一个值(我应该注意,通过引用传递是绕过这个通用规则的一种方式)。

实际上,这取决于您的应用程序。有时我会设计一个特定的类,将指针作为成员,然后发现切换更有意义,反之亦然。

"当在"包含"对象的生命周期内需要更改指向"包含"的对象的指针时,应使用指针解决方案"

指针可以指向不同的对象类型
引用只是类型的别名,不能绑定到其他类型。它们仍然是声明时绑定到的对象的别名。

例如:

int i,j,k;
i = 10;
j=20;
k=30;
int *ptr;
ptr = &i;       //ptr now points to i
ptr = &j;       //ptr now points to j, Allowed!
int &ref = i;   //ref is alias of i
ref = j;        //Allowed BUT It assigns value of j to i and doesnt point ref to j

该语句的意思是,如果您希望成员变量指向不同的对象,那么它应该是指针,然后应该是引用。

注意:通过使用const pointers,您可以对作为引用的指针执行相同的行为。

最新更新