如何解决自定义删除程序中用于智能共享指针的隐式指针参数
我想问一个有关C ++中自定义删除器的问题。
我一直在学习OOP和智能指针,以初始化和删除堆上指针所指向的对象。
#include <iostream>
#include <memory>
class Test {
private:
int data;
public:
Test() : data {0} {std::cout << "\tTest constructor (" << data << ")" << std::endl;}
Test(int data): data{data} {std::cout << "\tTest constructor (" << data << ")" << std::endl;}
int get_data () const {return data;}
~Test() {std::cout << "\tTest destructor (" << data << ")" << std::endl;}
};
void my_deleter (Test *ptr) {
std::cout << "\tUsing my custom function deleter" << std::endl;
delete ptr;
}
int main () {
{
// using a function
std::shared_ptr<Test> ptr1 {new Test {100},my_deleter};
}
std::cout << "====================" << std::endl;
{
// using a lambda
std::shared_ptr<Test> ptr2 {new Test {1000},[] (Test *ptr) {
std::cout << "\tUsing my custom lambda deleter" << std::endl;
delete ptr;}
};
return 0;
}
}
如果您查看函数my_deleter
,它将需要一个Test
类型的参数和一个指针。
但是,当在智能指针初始化中执行代码时,指针本身不会作为参数传递。
std::shared_ptr<Test> ptr1 {new Test {100},my_deleter};
我在这里很困惑。
为什么这里没有传入任何参数,但是代码仍然输出我需要的内容?
输出
Test constructor (100)
Using my custom function deleter
Test destructor (100)
====================
Test constructor (1000)
Using my custom lambda deleter
Test destructor (1000)
我的猜测是,类似于OOP,其中this
指针在C ++中是隐式的,当自定义删除器超出范围后调用智能删除器时,智能指针对象也是隐式的,但是我发现没有任何东西可以支持声明。
为什么不需要在智能指针初始化中为删除程序提供参数?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。