我有一个关于在C++中实例化对象的简单问题:如果我们假设我的类有一个默认构造函数,那么我创建这样的新对象:
PfAlgorithm object = new PfAlgorithm();
Run Code Online (Sandbox Code Playgroud)
但是当我跑步时我得到这个错误:
conversion from ‘PfAlgorithm*’ to non-scalar type ‘ns3::PfAlgorithm’ requested
Run Code Online (Sandbox Code Playgroud)
有人可以向我解释这个错误的原因吗?非常感谢你.
该new运营商返回一个指针,而不是一个值.所以你需要写:
PfAlgorithm* object = new PfAlgorithm()
Run Code Online (Sandbox Code Playgroud)
object指向新分配的PfAlgorithm对象的指针在哪里.有关指针的一些简单的介绍性信息可以在这里找到.然而,正如下面的评论中所讨论的那样,处理原始指针几乎从来都不是一个好主意(由于内存泄漏的潜在问题,所有权模糊等问题).继续阅读......
在堆上分配了这个对象后,你需要确保在完成它时删除它,否则你的应用程序将泄漏内存.为了使这更容易,我强烈重新考虑你还考虑使用来自boost库(或来自C++ 11)的智能指针来管理你的内存.
另外,正如其他人提出的那样,你可以简单地做到:
PfAlgorithm object;
Run Code Online (Sandbox Code Playgroud)
并在堆栈上分配您的对象,而不必担心管理内存.
你是否有可能在Java方面比在C++方面更有经验?与Java不同,在C++中,实例化对象时不需要new:
PfAlgorithm object;
Run Code Online (Sandbox Code Playgroud)
创建一个类型的对象PfAlgorithm就好了.当变量超出范围时,该对象将自动销毁.