定义一个对象有什么区别;s成员的值、指针或引用
whats the difference in define an object's member a value, a pointer or a reference
我刚接触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
,您可以对作为引用的指针执行相同的行为。
相关文章:
- 如何使用基类指针引用派生类成员
- 将常量指针引用绑定到非常量指针
- 如果非动态变量被指针引用,何时超出范围?
- 转换指针引用的字符串
- 指针引用的生存期(以 C++为单位)
- 从 unique_ptr::get 发送指针作为指针引用进入函数
- 指针/引用的 CLion 格式
- 使用模板专用化来比较指针引用
- 如何保存指向抽象基类的指针/引用,但在 c++ 中仍然可以复制
- C++初始化指针/引用/复制细微差别
- 用数组或指针引用函数?
- 指针范围问题和返回类中封装的指针向量内的指针引用
- 强制转换为指针引用是否会导致未定义的行为
- 访问由 void 指针引用的结构的成员
- C 为什么当先前的步骤引发异常时,std :: shared_ptr的指针引用会被破坏
- 动态指针引用数组由三元运算符返回值,但有异常
- 悬空指向 int 和 char* 常量的指针/引用
- C++ 二维数组和指针引用
- 通过使用指针/引用,在C++中使用向量加快计算速度
- C++非类型模板模板到函数指针/引用