C++ 实例化类时出错

C++ 实例化类时出错,c++,object,instantiation,C++,Object,Instantiation,我有一个关于在C++中实例化对象的简单问题: 如果我们假设我的类有一个默认构造函数,那么我创建新对象如下: PfAlgorithm object = new PfAlgorithm(); 但当我运行时,会出现以下错误: conversion from ‘PfAlgorithm*’ to non-scalar type ‘ns3::PfAlgorithm’ requested 有人能给我解释一下这个错误的原因吗? 多谢各位 new运算符返回指针,而不是值。所以你需要写: PfAlgorithm

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

PfAlgorithm object = new PfAlgorithm();
但当我运行时,会出现以下错误:

conversion from ‘PfAlgorithm*’ to non-scalar type ‘ns3::PfAlgorithm’ requested
有人能给我解释一下这个错误的原因吗?
多谢各位

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

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

在堆上分配了这个对象之后,您需要确保在处理完它后将其删除,否则应用程序将泄漏内存。为了使这更容易,我强烈地重申,你也可以考虑使用来自(或C++ 11)的智能指针来管理你的内存。 或者,正如其他人所建议的,您可以简单地执行以下操作:

PfAlgorithm object;

并将对象分配到堆栈上,不必担心内存管理。

< P>你是否可能比C++更精通java?与java不同,C++中,当你实例化一个对象时,不需要<代码>新< /C> >:
PfAlgorithm object;

创建类型为
PfAlgorithm
的对象。当变量超出范围时,该对象将自动销毁。

C++区分对象(在您的例子中为PfAlgorithm类型)和指向对象的指针(PfAlgorithm*)。
newpfalgorithm()
表达式返回指向新分配对象的指针。如果这是您想要的,您还必须使
对象
具有指针类型:

PfAlgorithm *object = new PfAlgorithm();
如果您不想使用指针,请不要使用新的

PfAlgorithm object = PfAlgorithm();

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

这样做比必要的更复杂。丢失指针(因此
new
)。鉴于OP提供的详细程度,这根本不是一个可接受的解决方案。@KonradRudolph。好啊我理解指针是复杂的。但是,坦率地说,你不需要在C++中得到太多的知识而不知道它们。因此,我认为额外包含堆栈分配是完全正确的(正如其他人所做的,也正如我所包含的),但断言这不是一个可接受的解决方案是相当极端的。@Alex,我可以告诉您一个简单的解决方案。我坚持我的主张。拥有原始指针的内存在C++中没有位置。包含它们的代码质量很低。@KonradRudolph。善良我完全同意。但在分配对象(堆栈/堆)的位置和管理方式之间存在区别。因此,无论如何提倡将
new
-ing直接插入智能指针,但您似乎只是在最初的注释中建议堆栈分配。