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

标签 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);
        }
}

不过,数组对象的正确初始化是:

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.
    } 
};

请注意,我没有使用指针、newdeletemalloc()free() 这里的任何地方。 You often don't need pointers for many, many cases in C++ .与流行的看法相反,在使用现代 C++ 技术时,您实际上需要做的手动内存管理非常少。事实上,如果您在 C++ 代码中使用 deletefree(),您可能做错了。

我想再次强调 a good introductory C++ book 的重要性帮助您学习语言。任何介绍 C++ 的好书都会涵盖 std::vector 以及如何利用它来发挥您的优势。其他资源 such as a std::vector reference也可以提供帮助。熟悉它们。

关于c++ - C++中指向数组对象的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11380976/

相关文章:

c++ - OpenGL 不显示天空盒纹理?

c++ - SystemC HLS综合错误

c++ - 真值表到位表达式

C++:如何检查没有扩展名的文件类型

python - 在python中使用 "using std::vector"时SWIG参数错误

javascript - 省略的数组元素是否会产生自己的属性?

c - 如何找到具有特定值的行或列的总和?

javascript - 你能帮我理解 sort() 在 Javascript 中是如何工作的吗?

ios - 快速固定大小的数组

PHP 比较两个关联数组并创建一个具有匹配项的新数组的最佳方法