普通函数delete会怎么样?
时间: 2023-03-25 11:03:44 浏览: 42
普通函数delete用于释放动态分配的内存,它会将指针所指向的内存空间释放,并将指针置为NULL。如果指针本身就是NULL,则delete操作不会有任何影响。但是,如果指针指向的内存空间已经被释放或者指针指向的不是动态分配的内存,则delete操作会导致未定义的行为。因此,在使用delete操作时,需要确保指针指向的内存空间是动态分配的,并且在释放内存后,要将指针置为NULL,以避免出现野指针的问题。
相关问题
C++ 成员函数后面写 delete
在 C++ 中,在成员函数后面写 `delete` 关键字可以用来禁止或删除特定的成员函数。
当我们在类的定义中声明一个成员函数,并在其后面使用 `delete` 关键字时,意味着我们要禁止该函数的使用。这样做可以在编译期间阻止对该函数的调用,从而实现对特定函数的限制。
以下是一些使用 `delete` 关键字的示例:
1. 禁止默认构造函数:
```cpp
class MyClass {
public:
MyClass() = delete;
};
```
在这个例子中,我们使用 `delete` 关键字来禁止了默认构造函数。这意味着不能通过默认方式创建 `MyClass` 类的对象,而必须使用其他方式进行初始化。
2. 禁止拷贝构造函数和拷贝赋值运算符:
```cpp
class MyNonCopyableClass {
public:
MyNonCopyableClass(const MyNonCopyableClass&) = delete;
MyNonCopyableClass& operator=(const MyNonCopyableClass&) = delete;
};
```
在这个例子中,我们使用 `delete` 关键字禁止了拷贝构造函数和拷贝赋值运算符。这样做可以防止对象被拷贝,只能通过移动语义或其他方式进行对象的复制或赋值操作。
需要注意的是,`delete` 关键字只能用于特定的函数(如构造函数、析构函数、拷贝构造函数、拷贝赋值运算符等),而不能用于普通的成员函数。
使用 `delete` 关键字可以提高代码的可读性和安全性,同时也是一种良好的编程实践,可以防止误用或不必要的函数调用。
如何在普通函数里调用成员函数
在普通函数里调用成员函数需要使用对象或对象的指针来调用。例如,如果有一个类 `MyClass`,其中有一个成员函数 `void myFunc()`,可以通过以下方式在普通函数中调用它:
```c++
class MyClass {
public:
void myFunc() {
// do something
}
};
void myOtherFunc() {
MyClass obj;
obj.myFunc();
}
int main() {
myOtherFunc();
return 0;
}
```
或者,如果有一个类 `MyClass` 的指针 `ptr`,可以通过以下方式在普通函数中调用它:
```c++
class MyClass {
public:
void myFunc() {
// do something
}
};
void myOtherFunc() {
MyClass* ptr = new MyClass();
ptr->myFunc();
delete ptr;
}
int main() {
myOtherFunc();
return 0;
}
```
在上述示例中,`myOtherFunc()` 是一个普通函数,它分别创建一个 `MyClass` 对象和一个 `MyClass` 指针,并使用它们来调用 `myFunc()` 成员函数。注意,在使用指针时,必须使用箭头(->)运算符来调用成员函数,而不是点(.)运算符。