我是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);
}
}
Run Code Online (Sandbox Code Playgroud)
但是,数组对象的正确初始化是:
array<int,5>
Run Code Online (Sandbox Code Playgroud)
但这种方式不允许我在运行时选择长度.
In *_*ico 11
我强烈建议你选一本好的C++入门书,忘掉Java.说实话,在学习C++时,用Java思考会适得其反.它们可能具有相似的语法,但它们具有非常非常不同的语义.
您遇到的问题与语言的基本概念有关.在继续之前,你必须从一本好的C++入门书中学习基础知识.
std::array(如果你正在使用的那个)不是用于这个特定应用程序的正确类,因为你想在运行时选择长度.它的大小std::array在编译时固定.
您应该使用std::vector,它允许您在运行时指定(和更改)大小.
标准容器,如为您std::vector管理内存; 你不需要new或delete标准容器.存在标准容器是因为您不必自己手动处理内存.
#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.
}
};
Run Code Online (Sandbox Code Playgroud)
请注意,我没有使用指针,new,delete,malloc(),或free()任何地方在这里.对于C++中的许多情况,您通常不需要指针.与流行的看法相反,在使用现代C++技术时,您实际上必须进行的手动内存管理非常少.事实上,如果您正在使用delete或使用free()C++代码,那么您可能做错了.
我想再次强调一本好的C++入门书在帮助你学习语言方面的重要性.任何好的C++入门书都将涵盖std::vector以及如何利用它来发挥你的优势.其他资源(如std::vector参考资料)也可以提供帮助.熟悉它们.
| 归档时间: |
|
| 查看次数: |
394 次 |
| 最近记录: |