当前位置: 首页 > 知识库问答 >
问题:

指针删除的C++模式?

雍河
2023-03-14

我想知道是否存在删除指针的模式。更具体地说,当您需要为数据调用某种中间函数时。下面是我所想的一个例子:

int main() {
    // some code here

    char* return_of_function1 = function1(int_array);
    int return_of_function2 = function2(return_of_function1);
    delete[] return_of_function1;

    // some code here
} 

char* function1(int* int_array) {
    // some code here
}

int function2(char* char_array) {
    // some code here
}
int main() {
    // some code here

    int return_of_function2 = function2(int_array);

    // some code here
}

char* function1(int* int_array) {
    // some code here
}

int function2(int* int_array) {
    // some code here
    return function2(function1(int_array), true);
}

int function2(char* char_array, bool delete_array) {
    // some code here

    if(delete_array) {
        delete[] char_array;
    }

    return /* return value */;
}

其目的是避免对集合属性的数据进行中间调用。再一次,我只是想问一下这是不是常用的,或者一开始是不是一个好主意。

非常感谢。

共有1个答案

松旻
2023-03-14

通常的做法是以您正在使用的方式远离原始指针。如果您的char*确实是一个字符串,那么请使用std::string(例如)。

RAII代表资源获取即初始化。对此重要的是,您用一个对象包装您的资源,并且您让对象超出范围。它会因为超出范围而被破坏,而析构函数是您唯一需要担心破坏数据的地方。如果您真的要使用char*而它实际上不是字符串,因此您应该使用string,它可能如下所示:

class CharArray {
public:
     CharArray(whatever args you need);
     virtual ~CharArray() { if (ptr) delete[] ptr; }
private:
     char * ptr = nullptr;
};

如果CharArray的任何方法实际上可以更改ptr,那么您需要确保首先小心地释放旧的内容。

您还需要确保您有完整的move构造函数/运算符等,这样您就可以安全地返回这些。

另一个选择是智能指针。请参阅std::shared_ptrstd::unique_ptr。这些家伙很棒。他们为你处理这一切,有引用计数。

 类似资料:
  • 问题内容: 我是Java菜鸟。我已经掌握了将C / C ++指针转换为Java引用的概念,并且进展相当顺利。 我打了一段有指针的代码(即* ptr)。我需要取消引用指针并更改其指向的指针的值(即 ptr =&newthing;) 在Java中这似乎要困难得多。是否有人对如何解决此问题有任何想法?快速谷歌搜索什么都没有。 这是C ++中的代码示例。我想在Java中获得类似的工作,但是ptr_to_p

  • 学习 C++ 的指针既简单又有趣。通过指针,可以简化一些 C++ 编程任务的执行,还有一些任务,如动态内存分配,没有指针是无法执行的。所以,想要成为一名优秀的 C++ 程序员,学习指针是很有必要的。 正如您所知道的,每一个变量都有一个内存位置,每一个内存位置都定义了可使用连字号(&)运算符访问的地址,它表示了在内存中的一个地址。请看下面的实例,它将输出定义的变量地址:#include <iostr

  • 027. Remove Element[E] 问题 Given an array and a value, remove all instances of that value in place and return the new length. Do not allocate extra space for another array, you must do this in place wi

  • 我在strut中得到空指针异常。我只做了一个简单的Hello world示例。当我单击时显示此错误。这是我的代码 web.xml struts.xml 操作类别: 索引.jsp 它显示索引.jsp争辩当我点击你好它显示错误。 HelloWorld.jsp

  • 主要内容:1. 指针是什么?,2. 如何使用指针?,3. Objective-C NULL指针,4. Objective-C指针详解Objective-C中的指针简单易学。使用指针可以更轻松地执行某些Objective-C编程任务,并且在不使用指针的情况下无法执行其他任务(如动态内存分配)。 所以有必要学习指向成为一个完美的Objective-C程序员。在这小节中将通过简单的步骤学习指针。 每个变量都是一个内存位置,每个内存位置都定义了它的地址,可以使用符号()运算符进行访问,该运算符表示内存中

  • 主要内容:this 到底是什么this 是 C++ 中的一个关键字,也是一个 const 指针,它指向当前对象,通过它可以访问当前对象的所有成员。 所谓当前对象,是指正在使用的对象。例如对于 ,stu 就是当前对象,this 就指向 stu。 下面是使用 this 的一个完整示例: 运行结果: 李华的年龄是16,成绩是96.5 this 只能用在类的内部,通过 this 可以访问类的所有成员,包括 private、protec