【问题标题】:Pointer to a template class指向模板类的指针
【发布时间】:2020-01-08 20:41:16
【问题描述】:

我写了一个简单的模板类,如果对象是在不使用指针的情况下创建的,它可以正常工作。但是,如果我需要创建一个指向该类对象的指针,我会得到error: invalid conversion from ‘int’ to ‘Logger<int>*’ [-fpermissive]。我附上下面的代码。任何帮助表示赞赏。 谢谢。

#include <iostream>
using namespace std;

template<typename T>
class Logger
{
    public:
        Logger (const T& d) {data = d;}
        void print(){std::cout << "data: " << data << std::endl;}
    private:
        int data;
};


int main() {
    /*
    // Works
    Logger<int> myLogger(5);
    myLogger.print();
    */

    Logger<int>* myLogger(5);
    myLogger->print();
    return 0;
}

【问题讨论】:

  • 那是因为它只是一个指向记录器对象的指针,而不是某个对象本身。你必须这样做Logger&lt;int&gt; *myLogger = new myLogger(5);(请不要这样做,手动内存管理很糟糕。使用 std::unique_ptr)。
  • @Geek -- C++ 不是 Java。无需使用new 创建对象。
  • 这不是模板独有的。我认为您在 C++ 书中可能跳得太远了。

标签: c++ class templates


【解决方案1】:

如果你想分配一个指针,你需要使用new(并记住在不再需要它时使用delete,以免泄露它)。

Logger<int>* myLogger = new Logger<int>(5);

我不知道您这样做的用例是什么,但如果您确实需要动态分配对象,我建议您尽可能使用智能指针。

std::unique_ptr<Logger<int>> myLogger = std::make_unique<Logger<int>>(5);

【讨论】:

  • 似乎适合使用auto myLogger = ...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-02
  • 1970-01-01
  • 1970-01-01
  • 2017-10-16
  • 1970-01-01
相关资源
最近更新 更多