llvm :: Module是两个运算符的左侧。*和 - > *

时间:2015-12-03 13:16:13

标签: c++ pointers llvm unique-ptr

我正在阅读LLVM Tutorial并看到这些陈述(在不同的位置):

static std::unique_ptr<Module> TheModule;
TheModule.get();
TheModule->getFunction(arg);

但是当我尝试将它放在我的代码中时:

TheModule->get();

我收到错误:

  

myTest.cpp:116:16:错误:没有名为&#39; get&#39; in&#39; llvm :: Module&#39; TheModule-&GT;得到();

为什么llvm::Module可能是.*->*的左侧?为什么TheModule.get()有效,但TheModule->get()没有?

这是否与std::unique_ptr有关?

2 个答案:

答案 0 :(得分:3)

  

这与std :: unique_ptr有什么关系吗?

是的,确实如此。

std::unique_ptr get你设法用TheModule.get()调用,它返回托管指针,TheModule->get()不一样,它相当于:

TheModule.get()->get();
(*TheModule).get();
(*TheModule.get()).get();

这些都是相同的,他们在托管get实例上调用llvm::Module。当然,llvm::Module没有get,这就是您收到错误的原因。

一旦你了解std::unique_ptr的{​​{3}}做什么,这真的不足为奇了。这些运算符存在,因此您可以使用智能指针(语法)与原始指针一样。 operator* and operator->返回一个指向托管对象的原始指针。

答案 1 :(得分:1)

使用&#34;箭头&#34;运算符->,当您使用点运算符.访问unique_ptr对象时,您可以访问包含的指针。

例如

TheModule.get()  // Calls std::unique_ptr<T>::get()

TheModule->getFunction(arg);  // Calls llvm::Module::getFunction()