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?