【发布时间】:2019-03-14 18:33:38
【问题描述】:
这是我的分配:
for (int i = 0; i < numCols; i++)
{
columnNameLen = new SQLSMALLINT *[numCols];
columnDataType = new SQLSMALLINT *[numCols];
columnDataSize = new SQLULEN *[numCols];
columnDataDigits = new SQLSMALLINT *[numCols];
columnDataNullable = new SQLSMALLINT *[numCols];
columnData = new SQLWCHAR *[numCols];
columnDataLen = new SQLLEN *[numCols];
columnName = new SQLWCHAR *[numCols];
}
for (int i = 0; i < numCols; i++)
{
columnNameLen[i] = new SQLSMALLINT;
columnDataType[i] = new SQLSMALLINT;
columnDataSize[i] = new SQLULEN;
columnDataDigits[i] = new SQLSMALLINT;
columnDataNullable[i] = new SQLSMALLINT;
columnDataLen[i] = new SQLLEN;
columnName[i] = new SQLWCHAR[256];
}
这是我的删除:
for (int i = 0; i < numCols; i++)
{
delete columnNameLen[i];
columnNameLen[i] = NULL;
delete columnDataType[i];
columnDataType[i] = NULL;
delete columnDataSize[i];
columnDataSize[i] = NULL;
delete columnDataDigits[i];
columnDataDigits[i] = NULL;
delete columnDataNullable[i];
columnDataNullable[i] = NULL;
delete columnData[i];
columnData[i] = NULL;
delete columnDataLen[i];
columnDataLen[i] = NULL;
delete[] columnName[i];
columnName[i] = NULL;
}
for (int i = 0; i < numCols; i++)
{
delete[] columnNameLen;
columnNameLen = NULL;
delete[] columnDataType;
columnDataType = NULL;
delete[] columnDataSize;
columnDataSize = NULL;
delete[] columnDataDigits;
columnDataDigits = NULL;
delete[] columnDataNullable;
columnDataNullable = NULL;
delete[] columnData;
columnData = NULL;
delete[] columnDataLen;
columnDataLen = NULL;
delete[] columnName;
columnName = NULL;
}
上面的代码可以吗?我可能应该只使用智能指针,但我不知道使用它们的代码会是什么样子?因此,如果您输入智能指针代码,将不胜感激。这些指针在线程函数中本地使用,不与任何东西共享。
我担心第二个循环只需要delete 而不是delete[]。
TIA!
【问题讨论】:
-
开始使用 c++ 惯用的结构,你永远不会后悔。 std::vector、std::shared_ptr 和 std::string(不清楚是否已经使用)
-
这些东西是二维的吗?为什么不只是
new SQLSMALLINT [numCols] -
@pm100,是的,它是二维的。
-
@pm100,shared_ptr 会是什么样子?
-
你确定是 2D,我想你只有一个 columnNameLen、columnDataType、...的数组,你首先代码分配了许多数组,但只使用其中一个(对于每个 columnNameLen,... )
标签: c++ c++11 pointers smart-pointers