PointCloudXYZI::Ptr lidar(new PointCloudXYZI());和PointCloudXYZI::Ptr lidar;这两种定义指针的方式有什么区别
时间: 2024-10-19 21:05:53 浏览: 17
C++11 std::shared_ptr总结与使用示例代码详解
在C++中,`PointCloudXYZI::Ptr lidar(new PointCloudXYZI());` 和 `PointCloudXYZI::Ptr lidar;` 这两种定义指针的方式有不同的含义和影响。
第一种情况:
```cpp
PointCloudXYZI::Ptr lidar(new PointCloudXYZI());
```
这是创建了一个指向`PointCloudXYZI`类型的动态分配的智能指针。`new`关键字用于在堆上创建一个新的`PointCloudXYZI`对象实例,并将其所有权转移到`lidar`智能指针。当不再需要这个对象时,智能指针会自动管理内存释放,防止内存泄漏。
第二种情况:
```cpp
PointCloudXYZI::Ptr lidar;
```
这里只是声明了一个`PointCloudXYZI`类型的智能指针,但并没有初始化它。这意味着`lidar`实际上是一个未绑定的、空的指针,它并不指向任何有效的对象。如果后续尝试通过`*lidar`或`lidar->`操作它,会抛出异常,因为没有关联的对象供其引用。
总结一下:
1. 第一种定义了并初始化了对象,占用内存;
2. 第二种仅仅声明了指针,没有实际对象,需要后续赋值。
阅读全文