0

我有一个关于在 C++ 中实例化对象的简单问题:如果我们假设我的类有一个默认构造函数,那么我会像这样创建新对象:

PfAlgorithm object = new PfAlgorithm();

但是当我运行时出现此错误:

conversion from ‘PfAlgorithm*’ to non-scalar type ‘ns3::PfAlgorithm’ requested

有人可以向我解释这个错误的原因吗?非常感谢你。

4

3 回答 3

5

new运算符返回一个指针,而不是一个值。所以你需要写:

PfAlgorithm* object = new PfAlgorithm()

whereobject是指向新分配的 PfAlgorithm 对象的指针。可以在此处找到有关指针的一些简单介绍性信息。然而,正如在下面的评论中所讨论的,处理原始指针几乎从来都不是一个好主意(由于内存泄漏的潜在问题、所有权不明确的问题等)。继续阅读...

在堆上分配此对象后,您需要确保在完成后将其删除,否则您的应用程序将泄漏内存。为了使这更容易,我强烈建议您还考虑使用来自boost 库(或来自 C++11)的智能指针来管理您的内存。

或者,正如其他人所建议的那样,您可以简单地执行以下操作:

PfAlgorithm object;

并在堆栈上分配您的对象,而不必担心管理内存。

于 2012-07-09T20:18:37.727 回答
5

有没有可能你在 Java 方面的经验比在 C++ 方面更有经验?与 Java 不同,在 C++ 中实例化对象时不需要:new

PfAlgorithm object;

创建一个类型的对象PfAlgorithm就好了。当变量超出范围时,该对象会自动销毁。

于 2012-07-09T20:22:11.113 回答
1

C++ 区分对象(在您的情况下为 PfAlgorithm 类型)和指向对象的指针(PfAlgorithm *)。该new PfAlgorithm()表达式返回一个指向新分配对象的指针。如果这是您想要的,您还必须object具有指针的类型:

PfAlgorithm *object = new PfAlgorithm();

如果您不想使用指针,请摆脱new

PfAlgorithm object = PfAlgorithm();

delete在第一种情况下,一旦您不再使用它,您将不得不使用它;在第二种情况下,对象将在退出{...}创建它的块 ( ) 时被销毁。没有像 Java 或 C# 中那样的自动内存管理。

于 2012-07-09T20:23:37.357 回答