c++ - 模板和内存分配

标签 c++ templates memory-management new-operator

#include <iostream>

template<class T> T CreateArray(T a, int n)
{
    a = new T [n]; // mistake: double* = double**
    return a;
}

int main()
{
    double* a;
    int n = 5;
    a = CreateArray(a,n);
    return 0;
}

我可以使用模板和新的分配内存吗?我的错误是什么?

最佳答案

您的代码有一些错误。首先,你可以做一些你想做的事情,但你应该这样写:

template<class T> T* CreateArray(int n)
{
    T* a = new T [n];
    return a;
}

int main()
{
    double* a;
    int n = 5;
    a = CreateArray<double>(n);
    return 0;
}

请注意,您不必传递 a 数组(它将在 CreateArray 中复制,并且其更改在 main 中不可见)。另请注意,您将模板定义为返回指针 T*,这正是 main() a 所期望的。

关于c++ - 模板和内存分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5513545/

相关文章:

c++ - 如何让QScrollArea根据QDialog改变大小?

Ruby 模板模块

c++ - C/C++/ObjectiveC 之间的内存差异,程序在 codepad.org 上崩溃,但在 Linux 上不会

C++ 虚拟方法,不需要 "this"指针 - 优化

c++ - 是否可以将 Cinder 与 VS2013 一起使用?

c++ - 尝试为两个参数调整二叉搜索树,导致崩溃 (C++)

c++ - 一个进程可以从它的虚拟内存中的任何地址读/写吗?

c++ - 特定模板特化的重载成员函数

D 中的模板和共享库

objective-c - 使用 ARC 下载和解压缩文件后的内存警告