当前位置:  开发笔记 > 编程语言 > 正文

为什么我不能传递ULARGE_INTEGER的共享指针,而是传递ULARGE_INTEGER*没有问题?

如何解决《为什么我不能传递ULARGE_INTEGER的共享指针,而是传递ULARGE_INTEGER*没有问题?》经验,为你挑选了1个好方法。

这是我的问题:

std::shared_ptr freeBytesAvailable = std::shared_ptr(new ULARGE_INTEGER);
std::shared_ptr totalNumberOfBytes = std::shared_ptr(new ULARGE_INTEGER);
std::shared_ptr totalNumberOfFreeBytes = std::shared_ptr(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,并且作为参数它需要a PULARGE_INTEGER,所以指向aULARGE_INTEGER

如果我使用test,test2和test3作为参数,它可以正常工作.但是,我想了解智能指针,因此尝试在我的代码中包含一些并使用它们.

每次我尝试传递我的智能指针时,都会出现转换错误,因此数据类型出现问题,但我无法弄清楚问题.

两者都不应该指向ULARGE_INTEGER吗?

有人可以帮忙吗?我的猜测是,我必须将原始指针解包出智能指针包装器,但我不知道该怎么做.



1> 小智..:

共享指针实际上只是封装原始指针的对象.因此,只有当被调用函数接受共享指针作为参数时,才能将共享指针作为函数参数传递!您不能传递原始指针代替共享指针,反之亦然.但是,有些情况下您可能希望将基础原始指针作为参数传递给函数调用.当您必须进行C库调用时,通常就是这种情况.在这种情况下,只需使用get()共享指针对象上的方法提取底层原始指针.所以在你的情况下,调用GetDiskFreeSpaceEx应该是:

GetDiskFreeSpaceEx(NULL,freeBytesAvailable.get(), totalNumberOfBytes.get(), totalNumberOfFreeBytes.get() )

假设函数按此顺序采用这些参数.

推荐阅读
echo7111436
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有