我想知道当一个系统如何释放内存时,malloc()调用是否与你分配malloc()的初始变量绑定在一起.
例如,我可以执行以下操作:
void * ptr1 = malloc(50);
void * ptr2 = ptr1;
ptr1 = malloc(25);
free(ptr2);
Run Code Online (Sandbox Code Playgroud)
我打算释放最初分配给ptr1 的内存,但后来用另一个指针释放它.
受这个问题的启发,我开始想知道是否有办法std::initializer_list从a 创建一个std::vector.
鉴于c ++ 17保证了RVO,在我看来,通过构建初始化函数的编译时调度表可能是可能的.
这是代码的第一次尝试:
#include <initializer_list>
#include <vector>
#include <iostream>
#include <array>
#include <stdexcept>
namespace impl
{
template<class T, std::size_t...Is>
auto as_init_list(std::vector<T> const& v, std::index_sequence<Is...>)
{
auto ret = std::initializer_list<T>
{
v[Is]...
};
return ret;
}
template<class T, std::size_t N>
auto as_init_list(std::vector<T> const& v)
{
auto ret = as_init_list(v, std::make_index_sequence<N>());
return ret;
}
template<class T, std::size_t...Is>
constexpr auto as_init_list_vtable(std::index_sequence<Is...>)
{
using ftype = std::initializer_list<T>(*)(std::vector<T> const&);
auto ret = std::array<ftype, sizeof...(Is)>
{{
&as_init_list<T, …Run Code Online (Sandbox Code Playgroud)