我有一个关于在 C++ 中实例化对象的简单问题:如果我们假设我的类有一个默认构造函数,那么我会像这样创建新对象:
PfAlgorithm object = new PfAlgorithm();
但是当我运行时出现此错误:
conversion from ‘PfAlgorithm*’ to non-scalar type ‘ns3::PfAlgorithm’ requested
有人可以向我解释这个错误的原因吗?非常感谢你。
我有一个关于在 C++ 中实例化对象的简单问题:如果我们假设我的类有一个默认构造函数,那么我会像这样创建新对象:
PfAlgorithm object = new PfAlgorithm();
但是当我运行时出现此错误:
conversion from ‘PfAlgorithm*’ to non-scalar type ‘ns3::PfAlgorithm’ requested
有人可以向我解释这个错误的原因吗?非常感谢你。
new
运算符返回一个指针,而不是一个值。所以你需要写:
PfAlgorithm* object = new PfAlgorithm()
whereobject
是指向新分配的 PfAlgorithm 对象的指针。可以在此处找到有关指针的一些简单介绍性信息。然而,正如在下面的评论中所讨论的,处理原始指针几乎从来都不是一个好主意(由于内存泄漏的潜在问题、所有权不明确的问题等)。继续阅读...
在堆上分配此对象后,您需要确保在完成后将其删除,否则您的应用程序将泄漏内存。为了使这更容易,我强烈建议您还考虑使用来自boost 库(或来自 C++11)的智能指针来管理您的内存。
或者,正如其他人所建议的那样,您可以简单地执行以下操作:
PfAlgorithm object;
并在堆栈上分配您的对象,而不必担心管理内存。
有没有可能你在 Java 方面的经验比在 C++ 方面更有经验?与 Java 不同,在 C++ 中实例化对象时不需要:new
PfAlgorithm object;
创建一个类型的对象PfAlgorithm
就好了。当变量超出范围时,该对象会自动销毁。
C++ 区分对象(在您的情况下为 PfAlgorithm 类型)和指向对象的指针(PfAlgorithm *)。该new PfAlgorithm()
表达式返回一个指向新分配对象的指针。如果这是您想要的,您还必须object
具有指针的类型:
PfAlgorithm *object = new PfAlgorithm();
如果您不想使用指针,请摆脱new
:
PfAlgorithm object = PfAlgorithm();
delete
在第一种情况下,一旦您不再使用它,您将不得不使用它;在第二种情况下,对象将在退出{...}
创建它的块 ( ) 时被销毁。没有像 Java 或 C# 中那样的自动内存管理。