C++ 指针。@BlackMoses在代码中的哪个位置表示res被分配了一个新地址?为什么不能stmt->executeQuery(“选择任何内容”)只返回一个指向stmt拥有的内存的指针?为什么在天堂(被任意的精神幻想所代替)中,你到处都返回指针。您应该使用能够
C++ 指针。@BlackMoses在代码中的哪个位置表示res被分配了一个新地址?为什么不能stmt->executeQuery(“选择任何内容”)只返回一个指向stmt拥有的内存的指针?为什么在天堂(被任意的精神幻想所代替)中,你到处都返回指针。您应该使用能够,c++,C++,指针。@BlackMoses在代码中的哪个位置表示res被分配了一个新地址?为什么不能stmt->executeQuery(“选择任何内容”)只返回一个指向stmt拥有的内存的指针?为什么在天堂(被任意的精神幻想所代替)中,你到处都返回指针。您应该使用能够理解如何管理其自身资源的对象。由于res被分配了新地址,如果您不在#1中调用delete,您将无法访问分配的内存。因此,是的,每次为指针分配新内存时,您都必须调用delete。@BlackMoses,代码中的什么地方说res被分配了一个新地址?
指针。@BlackMoses在代码中的哪个位置表示res被分配了一个新地址?为什么不能
stmt->executeQuery(“选择任何内容”)代码>只返回一个指向stmt拥有的内存的指针?为什么在天堂(被任意的精神幻想所代替)中,你到处都返回指针。您应该使用能够理解如何管理其自身资源的对象。由于res被分配了新地址,如果您不在#1
中调用delete
,您将无法访问分配的内存。因此,是的,每次为指针分配新内存时,您都必须调用delete
。@BlackMoses,代码中的什么地方说res被分配了一个新地址?为什么不能stmt->executeQuery(“选择任何内容”)代码>只返回一个指向stmt拥有的内存的指针?为什么在天堂(被任意的精神幻想所代替)中,你到处都返回指针。您应该使用能够理解如何管理自己资源的对象。res
是函数的本地对象,因此没有太多悬空指针的空间。res=nullptr代码>不影响指针的其他副本。它不能消除悬空指针。如果您的设计允许悬空指针的可能性,则需要修复设计,而不是应用创可贴。您如何确定res拥有通过stm->executeQuery(“选择任何内容”)返回的内存代码>“对于每一个新的,必须有一个删除”更准确地说,对于每一个新的
,必须有一个删除
。双删除是UB。res
是函数的本地项,因此没有太多悬空指针的空间。res=nullptr代码>不影响指针的其他副本。它不能消除悬空指针。如果您的设计允许悬空指针的可能性,则需要修复设计,而不是应用创可贴。您如何确定res拥有通过stm->executeQuery(“选择任何内容”)返回的内存代码>“对于每一个新的,必须有一个删除”更准确地说,对于每一个新的
,必须有一个删除
。双重删除是不正确的。
MyType getDataFromDB()
{
Driver *driver;
Connection *con;
Statement *stmt;
ResultSet *res;
/* Create a connection */
driver = get_driver_instance();
con = driver->connect("tcp://127.0.0.1:3306", "login", "pass");
/* Connect to the MySQL test database */
con->setSchema("schema");
stmt = con->createStatement();
MyType resultAnythngAndAnother;
// First query
res = stmt->executeQuery("SELECT anything");
while (res->next())
{
// fetch data from "SELECT anything"
}
delete res; // <----- Question #1: Should I every time call delete res before next assigning of res variable?
// Another query
res = stmt->executeQuery("SELECT another");
while (res->next())
{
// fetch data from "SELECT another"
}
delete res; // <----- Question #2: Is it enough to call delete res only once here? Since it won't be used anymore.
return resultAnythngAndAnother;
}
res = nullptr;
res = stmt->executeQuery("SELECT anything");
while (res->next())
{
// fetch data from "SELECT anything"
}
delete res; // <----- Question #1: Should I every time call delete res before next assigning of res variable?