如何从空容器中获取非nullptr?

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

我使用 C API,它接受一个指向数组的指针。该数组可以为空。

当使用 :

声明指针时,API 可以按预期工作

T *ptr = new T[size];

但我想使用

C++
容器的底层指针(使用
.data()
),以避免负责释放。

所以,我像这样声明我的容器:

std::vector<T> vec(size);

不幸的是,当

size
0
时,
ptr
不是
nullptr
并且
vec.data()
nullptr
, 因此,API 的行为与以前不同。

有没有办法从空容器中获取非 nullptr ?

c++ pointers
2个回答
1
投票

避免负责释放。

在您的情况下,

std::unique_ptr
可能比
std::vector
更适合:

std::unique_ptr<T[]> ptr(size);

但是

size
无法使用该智能指针保存/检索...


0
投票

没有标准的,但你可以尝试像下面这样的东西来代替 vec.data() - 即使很糟糕,你应该看看 C 接口是否可以改变:

vec.empty() ? reinterpret_cast<T*>(0xdeadbeef) : vec.data()

这是一个非空 ptr,无法取消引用 - 因此如果 C 代码实际上尝试取消引用它,它将会崩溃。

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