C++中的智能指针可以用原始资源指针和同类型的智能指针进行拷贝构造吗,举个例子
时间: 2024-05-15 12:14:32 浏览: 56
可以使用原始资源指针和同类型的智能指针进行拷贝构造。下面是一个例子:
```c++
#include <iostream>
#include <memory>
class MyClass {
public:
MyClass() {
std::cout << "MyClass constructed." << std::endl;
}
~MyClass() {
std::cout << "MyClass destroyed." << std::endl;
}
};
int main() {
// 创建一个智能指针
std::unique_ptr<MyClass> ptr1(new MyClass());
// 拷贝构造一个智能指针
std::unique_ptr<MyClass> ptr2(ptr1.get());
// 输出两个智能指针的地址
std::cout << "ptr1: " << ptr1.get() << std::endl;
std::cout << "ptr2: " << ptr2.get() << std::endl;
return 0;
}
```
输出结果为:
```
MyClass constructed.
ptr1: 0x7fcf2bc035e0
ptr2: 0x7fcf2bc035e0
MyClass destroyed.
```
在上面的例子中,我们先创建了一个 `MyClass` 类型的智能指针 `ptr1`,然后使用 `get()` 函数获取其原始资源指针,并将其作为参数创建了另一个智能指针 `ptr2`。由于 `ptr2` 是使用 `ptr1` 的原始资源指针构造而来,所以它和 `ptr1` 共享同一个对象,输出结果也证明了这一点。
需要注意的是,智能指针是为了管理资源的生命周期而设计的,因此在使用原始资源指针构造智能指针时,需要确保原始资源指针所指向的对象不会在智能指针的生命周期内被释放。否则,可能会出现悬空指针的问题。
阅读全文