unique_ptr没有成员函数。

3
我正在将我的gcc 4.4更新为gCC 4.7,我将这样做以使用4.7。
我的问题是当我使用unique_ptr时。我写了这段代码。
#include <iostream>
#include <memory>

#include <CL/cl.h>

using namespace std;

/*
 * 
 */
int main(int argc, char** argv) {

  std::unique_ptr<cl_platform_id[]>yt;
  yt = std::unique_ptr<icl_platform_id[]> (new cl_platform_id [3]);


  /* yt.get()[0] = ...... */ this is error no member found

    return 0;
}

但我希望使用yt成员,例如unique_ptr ::get(),但我得到的唯一函数是operator*,那么问题是什么?

编辑后:

这是我的问题: http://image-load.biz/?di=6FBY


@MarkB 看起来可能存在内存泄漏的风险,因为unique_ptr使用delete操作符(而不是delete[])释放受控资源。 - cybevnm
1
@vnm,除非cl_platform_id有需要调用的析构函数并释放内存,否则这不会是内存泄漏。 - Benj
1
@Benj 不管它是不是 POD,行为都是未定义的,任何事情都可能发生,包括内存泄漏。 - Mark B
1
@Benj - 请阅读此链接:http://www.parashift.com/c++-faq-lite/freestore-mgmt.html#faq-16.13 - Fred Larson
3
无论如何,这都相当不相关,因为unique_ptr有一个处理数组并调用delete[]的偏特化。 - Benj
显示剩余10条评论
2个回答

2
这是您的集成开发环境中成员建议存在的问题。无论是默认模板还是针对数组的部分特化,std :: unique_ptr都确实有一个成员pointer get() const noexcept;
如果您手动输入get(),编译器应该会很快乐。不幸的是,我从未使用过那个IDE,所以无法帮助您修复其自动完成程序。
是否应调用get()是另一个问题;您可以像yt [0]等一样访问数组元素。只有在您实际需要原始指针的罕见情况下才需要使用get()

2
你想要的是这样的东西:
std::unique_ptr<cl_platform_id[]> yt ( new cl_platform_id[3] );
yt[0].some_member();

我的问题不在于初始化成员,而是我除了operator*之外没有成员。 - user1344201
刚刚看到了截图,你确定只是你的IDE不知道如何正确解析它吗?如果假设成员存在进行编译会发生什么? - Benj
是的,它可以编译!我认为我的问题在于IDE。谢谢。 - user1344201
是的,请记住C++不像Java(它具有反射功能,因此可以告诉IDE如何解析自身),正确解析模板很棘手,并且并非所有IDE都能很好地完成这项工作。 - Benj

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接