鱼C论坛

 找回密码
 立即注册
查看: 1124|回复: 1

[已解决]类中声明与定义

[复制链接]
发表于 2023-4-4 15:20:14 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
智能指针在用的时候一定要初始化,要不然运行的时候会出错(可以正常编译)。下面以pcl库做一个简单的说明。
在函数里面进行初始化:

在main函数是声明+初始化一起的
pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_source (new pcl::PointCloud<pcl::PointXYZ>)

在类里面初始化:类内部初始化的时候,不可以跟上面那样使用new关键字进行初始化,可以使用智能指针的reset方法在构造函数里面进行初始化:

input_cloud.reset(new pcl::PointCloud<pcl::PointXYZRGB>());

也就是说classA的h文件中声明了classB,在cpp文件的初始化中只能通过reset来实现,为什么呢?

注:pcl::PointCloud<pcl::PointXYZ>::Ptr其实是一个封装的boost::shared_ptr
最佳答案
2023-4-4 15:23:59
智能指针如 boost::shared_ptr 是为了在 C++ 中实现自动内存管理而设计的。它们会自动跟踪资源的引用计数,并在引用计数为零时自动释放资源。这有助于避免内存泄漏和资源未释放的问题。

在类中使用智能指针时,为了保持代码清晰和遵循初始化列表的使用,通常会在类的构造函数中进行初始化。在这种情况下,我们不能像在 main 函数中那样使用 new 关键字直接初始化智能指针。原因如下:

  • 初始化列表:在类构造函数中,成员变量的初始化应该在初始化列表中进行。初始化列表能确保成员变量在构造函数体执行之前被初始化。然而,初始化列表不支持使用 new 进行初始化。
  • 资源管理:使用智能指针的 reset 方法在构造函数中初始化能够确保资源被正确管理。reset 方法不仅分配新资源,还确保智能指针关联的旧资源在必要时被正确释放。这有助于避免资源泄漏。


因此,在类中初始化智能指针时,推荐使用 reset 方法。这种方式能保持代码清晰,同时确保资源被正确管理。例如:
class MyClass {
public:
    MyClass() {
        input_cloud.reset(new pcl::PointCloud<pcl::PointXYZRGB>());
    }

private:
    pcl::PointCloud<pcl::PointXYZRGB>::Ptr input_cloud;
};

总之,使用 reset 方法在类中初始化智能指针是因为这种方式遵循了初始化列表的使用,并确保了资源的正确管理。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-4-4 15:23:59 | 显示全部楼层    本楼为最佳答案   
智能指针如 boost::shared_ptr 是为了在 C++ 中实现自动内存管理而设计的。它们会自动跟踪资源的引用计数,并在引用计数为零时自动释放资源。这有助于避免内存泄漏和资源未释放的问题。

在类中使用智能指针时,为了保持代码清晰和遵循初始化列表的使用,通常会在类的构造函数中进行初始化。在这种情况下,我们不能像在 main 函数中那样使用 new 关键字直接初始化智能指针。原因如下:

  • 初始化列表:在类构造函数中,成员变量的初始化应该在初始化列表中进行。初始化列表能确保成员变量在构造函数体执行之前被初始化。然而,初始化列表不支持使用 new 进行初始化。
  • 资源管理:使用智能指针的 reset 方法在构造函数中初始化能够确保资源被正确管理。reset 方法不仅分配新资源,还确保智能指针关联的旧资源在必要时被正确释放。这有助于避免资源泄漏。


因此,在类中初始化智能指针时,推荐使用 reset 方法。这种方式能保持代码清晰,同时确保资源被正确管理。例如:
class MyClass {
public:
    MyClass() {
        input_cloud.reset(new pcl::PointCloud<pcl::PointXYZRGB>());
    }

private:
    pcl::PointCloud<pcl::PointXYZRGB>::Ptr input_cloud;
};

总之,使用 reset 方法在类中初始化智能指针是因为这种方式遵循了初始化列表的使用,并确保了资源的正确管理。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-6-17 10:28

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表