我是 C++ 的新手(来自 Java),我想在类中声明一个数组对象,但它的模板参数中需要一个整数值。 我想我必须创建一个指向数组类的指针,但它不起作用..
我想做这样的事情:
class foo{
private:
array *myArray;
public:
foo(int size){
//This line may be terribly wrong, but you see what I mean
myArray = new array<int,5>();
}
~foo(){
free(myArray);
}
}
不过,数组对象的正确初始化是:
array<int,5>
但这种方式不允许我在运行时选择长度。
最佳答案
我强烈建议您选择a good introductory C++ book ,忘记 Java。说真的,学习 C++ 时用 Java 思考会适得其反。它们可能具有相似的语法,但它们具有非常非常不同的语义。
您遇到的问题与语言的基本概念有关。在继续之前,您必须从一本优秀的 C++ 入门书籍中学习基础知识。
std::array
(如果这是您正在使用的)不是用于此特定应用程序的正确类,因为您想在运行时选择长度。 std::array
的大小在编译时固定。
您应该改用 std::vector
,它允许您在运行时指定(和更改)大小。
std::vector
等标准容器为您管理内存;您不需要新建
或删除
标准容器。标准容器的存在是因为您不必自己手动处理内存。
#include <vector>
class foo
{
private:
std::vector<int> myArray;
public:
foo(int size) : myArray(size) // Sets the size of the array
{
}
~foo()
{
// You don't need to delete anything; the vector takes care of itself.
}
};
请注意,我没有使用指针、new
、delete
、malloc()
或 free()
这里的任何地方。 You often don't need pointers for many, many cases in C++ .与流行的看法相反,在使用现代 C++ 技术时,您实际上需要做的手动内存管理非常少。事实上,如果您在 C++ 代码中使用 delete
或 free()
,您可能做错了。
我想再次强调 a good introductory C++ book 的重要性帮助您学习语言。任何介绍 C++ 的好书都会涵盖 std::vector
以及如何利用它来发挥您的优势。其他资源 such as a std::vector
reference也可以提供帮助。熟悉它们。
关于c++ - C++中指向数组对象的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11380976/