gpt4 book ai didi

c++ - shared_ptr如何检测是否必须调用delete []或delete

转载 作者:行者123 更新时间:2023-12-02 09:55:49 27 4
gpt4 key购买 nike

我很好奇,shared_ptr类如何决定是否必须为以下语句调用deletedelete[]

一种。 boost::shared_ptr <char> ptr(new char);
b。 boost::shared_ptr <char []> ptr(new char[100]);

最佳答案

通过模板专门化完成。这是简单的演示。

#include <iostream>
#include <type_traits>

template<typename T>
struct foo
{
foo( T* d ) : m_data{ d } { }
~foo() {
if ( m_data )
std::cout << "delete called." << std::endl;
}

private:
T* m_data {};
};

template<typename T>
struct foo<T[]>
{
foo( T* d ) : m_data { d } { }
~foo() {
if ( m_data )
delete[] m_data;
std::cout << "delete[] called." << std::endl;
}
private:
T* m_data {};
};

int main()
{
foo<char> inst_1 { new char };
foo<char []> inst_2 { new char[ 100 ] { 'a' } };
}

online example

对于 T[]类型, struct foo<T[]>实例化,因此编译时多态性是通过模板专用化完成的,并且 smart_ptr借助此功能处理数组和普通类型的释放。

关于c++ - shared_ptr如何检测是否必须调用delete []或delete,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60293622/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com