C ++中的原始类型是否具有析构函数?

问题描述 投票:0回答:3

这个问题来自我试图理解智能指针的动机,在智能指针周围您创建了一个包装类,以便可以添加自定义析构函数。指针(以及整型,布尔型,双精度型等)没有析构函数吗?

c++ pointers destructor smart-pointers
3个回答
2
投票

原始类型(及其化合物)具有平凡的破坏者。这些命令不执行任何操作,并具有特殊的措词,使某些情况下可以完全跳过它们。

但是,这与C ++具有智能指针的原因正交。原始指针是没有所有权的:它指向另一个对象,但不影响其寿命。另一方面,智能指针拥有(或共享)他们的指针,将指针的寿命与自己的指针联系在一起。这是在析构函数的内部以及其他特殊函数中实现的。


0
投票

不,指针没有析构函数。通过普通旧指针引用的对象必须为delete d,以避免内存泄漏,然后调用该对象的析构函数,但是即使指针超出范围,编译器也不会自动调用delete-如果程序的另一部分也有指向同一对象的指针?

智能指针不是要调用自定义析构函数,而是要确保在超出范围时自动将其清除。这种“清理”可能是删除拥有的对象,free清理所有malloc的内存,关闭文件,释放锁等。


0
投票

如果不从堆分配新内存,则不需要析构函数。

C和C ++有两种存储变量的方法:堆栈和堆。

堆栈用于静态内存,由编译器负责。堆用于动态内存,如果使用它,则必须注意这一点。

当执行基本类型声明时,将为变量分配堆栈存储器。

[当您使用new声明一个对象时,该对象存储在堆上,在使用完该对象时需要将其删除,否则可能会导致内存泄漏。

基本上,如果您有新内容,则只需要delete

© www.soinside.com 2019 - 2024. All rights reserved.