C++ 为什么可以';我传递一个ULARGE_INTEGER的共享指针,但是传递一个ULARGE_INTEGER*没有问题吗?

C++ 为什么可以';我传递一个ULARGE_INTEGER的共享指针,但是传递一个ULARGE_INTEGER*没有问题吗?,c++,pointers,C++,Pointers,我的问题是: 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::sh

我的问题是:

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
}
std::shared_ptr freeBytesAvailable=std::shared_ptr(新的ULARGE_整数);
std::shared_ptr totalNumberOfBytes=std::shared_ptr(新的ULARGE_整数);
std::shared_ptr totalNumberOfFreeBytes=std::shared_ptr(新的ULARGE_整数);
ULARGE_整数*测试=新的ULARGE_整数;
ULARGE_整数*test2=新的ULARGE_整数;
ULARGE_整数*test3=新的ULARGE_整数;
if(GetDiskFreeSpaceEx(NULL、test3、test2、test))
{
//做点什么
}
如您所见,我想调用GetDiskFreeSpaceEx,作为一个参数,它需要一个
PULARGE\u整数
,因此需要一个指向
ULARGE\u整数的指针

如果我使用test、test2和test3作为参数,那么它工作得非常好。 然而,我想学习智能指针,因此尝试在我的代码中包含一些并使用它们

每次我尝试传递智能指针时,都会出现转换错误,因此数据类型肯定有问题,但我就是无法解决问题

两者不都应该指向一个ULARGE_整数吗


有人能帮忙吗?我的猜测是,我必须将原始指针从智能指针包装器中解包出来,但我不确定如何解包。

我找到了一个解决方案,因此我会将它写下来,供任何寻求快速解决方案的人使用:

.get()

将返回原始指针,因此如果您试图将智能指针传递给需要指针的函数,只需添加它即可。共享指针实际上只是封装原始指针的对象。因此,只有当被调用函数接受共享指针作为参数时,才能将共享指针作为函数参数传递!不能传递原始指针代替共享指针,反之亦然。但是,在某些情况下,您可能希望将底层原始指针作为参数传递给函数调用。当您必须进行C库调用时,通常会出现这种情况。在这种情况下,只需使用共享指针对象上的
get()
方法提取底层原始指针。 因此,在您的情况下,对
GetDiskFreeSpaceEx
的调用应该是:

GetDiskFreeSpaceEx(NULL,freeBytesAvailable.get(), totalNumberOfBytes.get(), totalNumberOfFreeBytes.get() )
这是假设函数按此顺序获取这些参数。

当有疑问时,以a开头。