我正在阅读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
有关?
答案 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()