指向c ++中的数组对象的指针

Gon*_*alo 0 c++ arrays

我是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管理内存; 你不需要newdelete标准容器.存在标准容器是因为您不必自己手动处理内存.

#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参考资料)也可以提供帮助.熟悉它们.