c++通过指针给对象赋值
时间: 2023-10-18 12:10:39 浏览: 51
在C++中,可以通过指针给对象赋值的方法主要有两种:使用“->”符号和使用“*”符号。
1. 使用“->”符号:
如果有一个指向对象的指针p,那么可以使用“->”符号来访问对象的成员函数和成员变量,例如:
```
class MyClass {
public:
int x;
void func() {
cout << "Hello World!" << endl;
}
};
MyClass *p = new MyClass; // 创建一个指向MyClass对象的指针
p->x = 10; // 给对象的x成员变量赋值
p->func(); // 调用对象的func成员函数
```
2. 使用“*”符号:
如果有一个指向对象的指针p,那么可以使用“*”符号来访问对象本身,例如:
```
class MyClass {
public:
int x;
void func() {
cout << "Hello World!" << endl;
}
};
MyClass *p = new MyClass; // 创建一个指向MyClass对象的指针
(*p).x = 10; // 给对象的x成员变量赋值
(*p).func(); // 调用对象的func成员函数
```
这两种方法都可以实现通过指针给对象赋值的功能,但是使用“->”符号更为简洁明了。
相关问题
c++ 智能指针相互赋值
智能指针相互赋值时需要注意避免悬空指针的出现。
在 C++11 中,unique_ptr 只能移动而不能拷贝,因此不能相互赋值。而 shared_ptr 可以被多个指针共享,因此可以相互赋值。但是,如果一个 shared_ptr 指向的对象被多个 shared_ptr 共享,那么赋值后可能会导致对象的析构行为出现问题。
为了避免这种问题,C++11 中提供了 std::move 和 std::swap 函数,可以在智能指针之间进行转移和交换操作。例如:
```
std::shared_ptr<int> ptr1(new int(1));
std::shared_ptr<int> ptr2(new int(2));
// 使用 std::swap 进行交换
std::swap(ptr1, ptr2);
// 使用 std::move 进行转移
std::shared_ptr<int> ptr3 = std::move(ptr1);
```
需要注意的是,在使用 std::move 进行转移操作后,原指针变成了空指针,因此需要谨慎操作,避免出现悬空指针的情况。
c++ delete指针之后如何再给该指针赋值/
在使用 delete 操作符删除指针后,该指针所指向的内存空间已经被释放,不能再次访问。如果需要再次使用该指针,需要重新分配内存空间并将其赋值给指针。可以使用 new 操作符来分配内存空间,并将返回的指针赋值给原指针变量。例如:
int* ptr = new int; // 分配内存空间
delete ptr; // 释放内存空间
ptr = new int; // 重新分配内存空间