成员函数中调用构造析构函数

示例如下:

class MyClass
{
public:
    MyClass(int a) : _a(a) {

}
    MyClass(const MyClass& rhs){
        new(this)MyClass(rhs._a); // placement new
    }
    MyClass & operator = (const MyClass& rhs){
        this->~MyClass();
        new(this)MyClass(rhs._a); // placement new
    }
    ~MyClass(){}
    int _a;
};

vc下,下面调用方式也可以,不过不能再gcc中编译。

class MyClassA
{
public:
    MyClassA()
    {
        this->MyClassA::MyClassA(8);
    }
    MyClassA(int i)
    {
        m_i = i;
    }
    void Fun(int i)
    {
        this->MyClassA::MyClassA(i);
    }
    int m_i;
};

时间: 2024-10-10 06:53:02

成员函数中调用构造析构函数的相关文章

在类的成员函数中调用delete this

在类的成员函数中能不能调用delete this?答案是肯定的,能调用,而且很多老一点的库都有这种代码.假设这个成员函数名字叫release,而delete this就在这个release方法中被调用,那么这个对象在调用release方法后,还能进行其他操作,如调用该对象的其他方法么?答案仍然是肯定 的,调用release之后还能调用其他的方法,但是有个前提:被调用的方法不涉及这个对象的数据成员和虚函数.说到这里,相信大家都能明白为什么会这样 了. 根本原因在于delete操作符的功能和类对象的

static成员函数不能调用non-static成员函数

1 一般类静态成员函数不能调用非静态成员函数 2 static成员函数可以调用构造函数吗? 答案是肯定的,由于static成员函数没有this指针,所以一般static成员函数是不能访问non-static成员的,包括成员函数和成员变量. 由于构造函数特殊性,它从无到有构造一个对象,因此调用它不需要一个instance,也就是不需要this指针来调用,所以在static 函数中能调用构造函数.o 构造函数分成两个阶段:    1. 分配内存:这是从无到有阶段,该阶段结束,产生一个instance

回调函数中调用类中的非静态成员变量或非静态成员函数

有关这方面的问题,首先说一点: 回调函数必须是静态成员函数或者全局函数来实现回调函数,大概原因是普通的C++成员函数都隐含了一个函数参数,即this指针,C++通过传递this指针给成员函数从而实现函数可以访问类的特定对象的数据成员.由于this指针的原因,使得一个普通成员函数作为回调函数时就会因为隐含的this指针问题使得函数参数个数不匹配,从而导致回调函数编译失败. 基于上面的理论,如何在类中封装回调函数呢? 回调函数只能是全局函数或者静态成员函数,但是由于全局函数会破坏封装性,所以只能用静

C++之类的成员函数的调用 vs. 普通函数的调用

首先请看下面的语句: Point3d obj; Point3d *ptr = &obj; 当使用上述指针或者对象调用成员函数Func()时,会有: obj.Func(); ptr->Func(); 上述调用的背后到底完成了一些什么呢? 假设Func函数的定义如下: Point3d Point3d::Func() const { Float a = getA(); Point3d ret; ret._x = _x/a; ret._y = _y/a; ret._z = _z/a; return

mutable用于修改const成员函数中的成员变量

http://no001.blog.51cto.com/1142339/389840/ mutalbe的中文意思是“可变的,易变的”,跟constant(既C++中的const)是反义词. 在C++中,mutable也是为了突破const的限制而设置的.被mutable修饰的变量,将永远处于可变的状态,即使在一个const函数中. 我们知道,如果类的成员函数不会改变对象的状态,那么这个成员函数一般会声明成const的.但是,有些时候,我们需要在const的函数里面修改一些跟类状态无关的数据成员,

在信号处理函数中调用longjmp

错误情况及原因分析 前两天看APUE的时候,有个程序要自己制作一个sleep程序,结果在这个程序中就出现了在信号处理函数中调用longjmp函数的情况,结果就出现了错误,具体错误是啥呢,请参见下面这段程序: 1 /* 2 * 在信号处理函数中调用longjmp的错误情况 3 */ 4 #include <errno.h> 5 #include <setjmp.h> 6 #include <signal.h> 7 #include <string.h> 8 #

wx: wx.showModal 回调函数中调用自定义方法

一.在回调函数中调用自定义方法: 回调函数中不能直接使用this,需要在外面定义 var that = this 然后 that.自定义的方法.如下: //删除 onDelete: function (e) { var that = this; wx.showModal({ title: '提示', content: '确定要删除?', success: function (res) { if (res.confirm) { that.onEdit(e); } } }) }, //编辑 onEd

【C/C++学院】0819-/类的成员函数与const-mutable /构造与析构/拷贝构造deletedefault以及深浅拷贝/静态成员函数成员变量类在内存的存储默认参数/友元类以及友元函数

类的成员函数与const-mutable 成员函数 Fushu.h #pragma once #include <iostream> class fushu { public: int x; int y; public: fushu(); ~fushu(); void show(); inline void showall(int x, int y);//显式内联 void setxy(int x, int y);//编译器优化,默认隐式内联 void show(int x, int y);

类成员函数的调用

#include<iostream> using namespace std; class Point { public: void output() { } static void init() { } }; void main() { Point pt; pt.init(); pt.output(); Point::init();//静态成员函数是类本身的,定义类时就分配了内存 Point::output(); //没有实例化,无法调用 }