c++ - 实例化类时出错

标签 c++ object instantiation

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

PfAlgorithm object = new PfAlgorithm();

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

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

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

最佳答案

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

PfAlgorithm* object = new PfAlgorithm()

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

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

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

PfAlgorithm object;

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

关于c++ - 实例化类时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11402386/

相关文章:

c# - 对象文字实例化比设置属性快吗?

java - 我应该如何根据用户选择来选择实例化哪个具体实现?

c++ - 确定源文件是否不可移植地依赖于标准 header 的间接包含

c++ - TMP C++ 和参数包

flutter - 无法将参数类型 'Object' 分配给参数类型“Map<String, dynamic>?

Javascript:使用函数定义对象属性的值

c++ - Quick Q - 无法将函数的输出写入文件

c++ - string 和 string_view 的索引运算符([])的区别

html - HTML4:为什么来自YouTube的视频的此链接在我的网站上不起作用?

c# - 实例化类而不将其保存在对象中是一种糟糕的编程习惯吗?