小编Pat*_*ray的帖子

何时调用C++析构函数?

基本问题:程序何时在C++中调用类的析构函数方法?有人告诉我,只要一个物体超出范围或受到一个物体的影响就会被召唤delete

更具体的问题:

1)如果通过指针创建对象并且稍后删除该指针或给出指向的新地址,那么它所指向的对象是否会调用其析构函数(假设没有其他指向它)?

2)关注问题1,什么定义了一个对象何时超出范围(不是关于对象何时离开给定的{block}).那么,换句话说,什么时候是一个析构函数调用链表中的对象?

3)你想要手动调用析构函数吗?

c++ destructor

100
推荐指数
4
解决办法
9万
查看次数

为什么不需要CPU来处理I/O请求?

我正在学习操作系统,但有一个我无法理解的小概念.假设进程1正在CPU上运行,然后它发出I/O请求以从磁盘读取.为了提高效率,CPU在处理此请求时开始执行进程2.这一切都有意义,但I/O不需要使用CPU吗?

在此输入图像描述

我的问题:为什么不需要CPU来处理进程1的请求?

io operating-system

36
推荐指数
1
解决办法
4748
查看次数

什么时候对象"超出范围"?

在C++中,何时将对象定义为"超出范围"?

更具体地说,如果我有一个单链表,那么将单个列表节点对象定义为"超出范围"?或者,如果一个对象存在并且被一个变量引用ptr,那么在删除引用或指向另一个对象时,该对象被定义为"超出范围"是否正确?

更新:假设一个对象是一个具有已实现的析构函数的类.在对象退出范围的那一刻,是否会调用析构函数?

if (myCondition) {
    Node* list_1 = new Node (3);
    Node* list_2 = new Node (4);
    Node* list_3 = new Node (5);

    list_1->next = list_2;
    list_2->next = list_3;
    list_3->next = null;
}
Run Code Online (Sandbox Code Playgroud)

换句话说,通过list_1在此行之后调用其析构函数来指向Node :

Node* list_1 = new Node (3);
Run Code Online (Sandbox Code Playgroud)

c++ destructor scope

26
推荐指数
2
解决办法
4万
查看次数

编写一个函数来复制C++中的链表

我需要实现一个名为copyList的辅助函数,它有一个参数,一个指向ListNode的指针.此函数需要返回指向原始链表副本的第一个节点的指针.换句话说,我需要在C++中编写一个函数,该函数接受链表的头节点并复制整个链表,返回指向新头节点的指针.我需要帮助实现这个功能,这就是我现在所拥有的.

Listnode *SortedList::copyList(Listnode *L) {

    Listnode *current = L;  //holds the current node

    Listnode *copy = new Listnode;
    copy->next = NULL;

    //traverses the list
    while (current != NULL) {
       *(copy->student) = *(current->student);
       *(copy->next) = *(current->next);

        copy = copy->next;
        current = current->next;
    }
    return copy;
}
Run Code Online (Sandbox Code Playgroud)

此外,这是我正在使用的Listnode结构:

struct Listnode {    
  Student *student;
  Listnode *next;
};
Run Code Online (Sandbox Code Playgroud)

注意:我正在使用此函数运行的另一个因素是返回指向局部变量的指针.

c++ linked-list

11
推荐指数
1
解决办法
3万
查看次数

基本树概念:定义祖先

在此输入图像描述

是什么定义了祖先?更具体地说,E是H的祖先吗?或者更简单的说F,C,A是H的祖先?也许甚至G?我想澄清这个简单的概念.

tree data-structures

9
推荐指数
1
解决办法
1万
查看次数

删除结构的指针也会删除结构中的指针吗?

假设我有一个带有两个指针的结构,每个指针指向一个具有已实现的析构函数的对象.还假设头指向Listnode结构,该结构具有非NULL值*student和*next:

struct Listnode {    
  Student *student;
  Listnode *next;
};
Listnode *head =  new Listnode;
Run Code Online (Sandbox Code Playgroud)

如果我使用deleteListnode指针'head'上的保留字,它将调用该结构中的析构函数Student class和Listnode类,其中'student'和'next'分别指向.换句话说,将删除*head也删除*student和*next提供的head是唯一指向该Listnode的指针

c++ struct destructor delete-operator

7
推荐指数
1
解决办法
2494
查看次数

C++默认参数错误

任何想法为什么这个错误在编译时出现?

ComplexNumber.cpp:21: error: default argument given for parameter 1 of ‘void ComplexNumber::print(std::ostream&) const’
ComplexNumber.h:17: error: after previous specification in ‘void ComplexNumber::print(std::ostream&) const’
Run Code Online (Sandbox Code Playgroud)

这是我在这些特定领域的代码:

ComplexNumber.cpp

21    void ComplexNumber::print(ostream & out = cout) const {
Run Code Online (Sandbox Code Playgroud)

ComplexNumber.h

17    void print(ostream & out = cout) const;
Run Code Online (Sandbox Code Playgroud)

c++ default-arguments

7
推荐指数
1
解决办法
3611
查看次数

Java泛型错误

可能重复:
Java如何:通用阵列创建
错误:通用阵列创建

我收到此错误:

Cannot create a generic array of T
Run Code Online (Sandbox Code Playgroud)

这是我的代码(第6行的错误):

1    public class HashTable<T> {
2    
3        private T[] array;
4    
5        HashTable(int initSize) {
6            this.array = new T[initSize];
7        }
8    }
Run Code Online (Sandbox Code Playgroud)

我想知道为什么会出现这个错误,并且是修复它的最佳解决方案.谢谢.

更新:

我调整了我的代码,以便数组代替链接列表,但我收到一个新的错误.

这是我的错误:

Cannot create a generic array of LinkedList<T>
Run Code Online (Sandbox Code Playgroud)

这是我的代码(第六行的错误):

1    public class HashTable<T> {
2    
3        private LinkedList<T>[] array;
4    
5        HashTable(int initSize) {
6            this.array = new LinkedList<T>[initSize];
7        }
8    }
Run Code Online (Sandbox Code Playgroud)

这个错误是出于同样的原因吗?我只是假设我可以创建通用链表并将它们存储在数组中.

java generics

6
推荐指数
2
解决办法
1302
查看次数

Clip() 与设置宽度、最大宽度和最小宽度有何不同?

我最近意识到您可以结合使用CSS函数clamp()width来设置“最大宽度”和“最小宽度”。我想知道在, ,上使用width+时的根本区别是什么。clamp()min-widthwidthmax-width

换句话说,这怎么...

.item {
   width: 100%;
   max-width: 200px;
   min-width: 100px;
}
Run Code Online (Sandbox Code Playgroud)

...与此不同...

.item {
   width: clamp(100px, 100%, 200px);
}
Run Code Online (Sandbox Code Playgroud)

css clamp

6
推荐指数
1
解决办法
1620
查看次数

运算符>>重载

我正在使用运算符重载实现复数.在程序中,用户以以下形式输入复数:ALWAYS:

a + bi
Run Code Online (Sandbox Code Playgroud)

所以,在例子中......

25.0 + 3.6i
Run Code Online (Sandbox Code Playgroud)

假设用户将始终输入复数的实部和虚部,例如,用户将输入"5 + 0i"(而不是"5")或"0 - 6.2i"(而不是"-6.2")一世").

我的问题是在main()中我有以下代码:

ComplexNumber c1;
cin >> c1;
cout << c1;
Run Code Online (Sandbox Code Playgroud)

并打印代码:

0 + 0i
Run Code Online (Sandbox Code Playgroud)

...当我在运行时输入"4.2 + 8.3i"时.

这是我的operator>>班级实施:

istream & operator>>(istream & in, ComplexNumber & n) {
    string real;
    string imag;
    bool done = false;
    int sign = 1;

    string num;
    in >> num;

    int length;
    for (int i = 0; i < num.length(); i++) {
        if (num.at(i) == 'i') {
            imag = num.substr((i - length), …
Run Code Online (Sandbox Code Playgroud)

c++ operator-overloading

3
推荐指数
1
解决办法
1075
查看次数