为什么我不能传递共享指针ULARGE_INTEGER,而是传递一个没有问题的ULARGE_INTEGER*?
Why can't I pass a shared pointer of ULARGE_INTEGER, but a ULARGE_INTEGER* without problems?
这是我的问题:
std::shared_ptr<ULARGE_INTEGER> freeBytesAvailable = std::shared_ptr<ULARGE_INTEGER>(new ULARGE_INTEGER);
std::shared_ptr<ULARGE_INTEGER> totalNumberOfBytes = std::shared_ptr<ULARGE_INTEGER>(new ULARGE_INTEGER);
std::shared_ptr<ULARGE_INTEGER> totalNumberOfFreeBytes = std::shared_ptr<ULARGE_INTEGER>(new ULARGE_INTEGER);
ULARGE_INTEGER *test = new ULARGE_INTEGER;
ULARGE_INTEGER *test2 = new ULARGE_INTEGER;
ULARGE_INTEGER *test3 = new ULARGE_INTEGER;
if (GetDiskFreeSpaceEx(NULL, test3, test2, test))
{
//do something
}
正如你所看到的,我想调用GetDiskFreeSpaceEx,作为一个参数,它需要一个PULARGE_INTEGER
,所以一个指向ULARGE_INTEGER
的指针
如果我使用test、test2和test3作为参数,它完全可以工作。然而,我想了解智能指针,因此尝试在我的代码中包含一些并使用它们。
每次我试图传递智能指针时,都会出现转换错误,所以数据类型一定有问题,但我就是搞不清问题所在。
不应该都指向一个ULARGE_INTEGER吗?
有人能帮忙吗?我的猜测是,我必须从智能指针包装器中解压缩原始指针,但我不确定如何做到这一点。
共享指针实际上只是封装原始指针的对象。因此,只有当被调用函数接受共享指针作为参数时,才能将共享指针作为函数参数传递!不能传递原始指针来代替共享指针,反之亦然。但是,在某些情况下,您可能希望将底层原始指针作为参数传递给函数调用。当您必须进行C库调用时,通常会出现这种情况。在这种情况下,只需使用共享指针对象上的get()
方法提取底层原始指针。因此,在您的情况下,对GetDiskFreeSpaceEx
的调用应该是:
GetDiskFreeSpaceEx(NULL,freeBytesAvailable.get(), totalNumberOfBytes.get(), totalNumberOfFreeBytes.get() )
也就是说,假设函数按此顺序接受这些参数。
我找到了一个解决方案,所以我会把它写下来,供任何寻找快速解决方案的人使用:
.get()
将返回原始指针,所以如果您试图将智能指针传递给一个需要指针的函数,只需添加它,就可以开始了。
相关文章:
- 将Integer转换为4字节的unsined字符矢量(按大端字节顺序)
- 使用IPC/共享内存将Integer数组从C++传递到Python
- C++ OpenCV Randu 函数抛出'Integer division by zero'
- 如何在满足常量表达式的同时将整数传递给指针,传递给 std::array<double、integer>?
- 在C++初始化程序列表中使用Integer Literals
- 为什么选择 g++ 给予者:"error: cast to pointer from integer of different size [-Werror=int-to-pointer-cast]"
- 如果我获得Integer和Double的产品,输出的数据类型是什么
- C Integer在C 代码中使用时会失去其恒定状态
- 将 int 与 double 进行比较的预处理器"invalid integer constant expression"
- 编译 C++ 代码时"Error: comparison between pointer and integer"
- Bitwise integer concationation
- DIS(P X)-X在GCC Linux X86-64 C 中始终导致Pointer P和Integer X的P
- 将cryptopp :: Integer转换为lpctstr
- 如何在C++中为integer、float和double数据类型同时重载运算符
- 初始化Integer字面形式到std :: size_t
- OpenCV文档说"uchar"是"unsigned integer"数据类型。如何?
- Arduino Integer error
- C签署的基于Integer的攻击
- 这是什么C++语言结构:#(即哈希)整数"path_to_header_or_cpp_file"<integer>?
- 使用多个文件时"array bound is not an integer constant before ']' token"