私はこのようなクラスを持っています
class variable
{
public:
variable(int _type=0) : type(_type), value(NULL), on_pop(NULL)
{
}
virtual ~variable()
{
if (type)
{
std::cout << "Variable Deleted" <<std::endl;
on_pop(*this);
value=NULL;
}
}
int type;
void* value;
typedef void(*func1)(variable&);
func1 on_pop;
}
そして、次のようにインスタンスを std::vector にプッシュします。
stack.push_back(variable(0));
変数のデストラクタが呼び出されることを期待していますが、インスタンスがベクトルにコピーされるときに提供するコンストラクタが呼び出されることを期待しているため、型に値が割り当てられるまで if は入りません。しかし、何らかの理由でそうではありません。
stack.push_back を呼び出した後、(コピーの) デストラクタが実行され、コンストラクタが呼び出されなかった場合のように、タイプにランダムな値が含まれます。
私は自分が間違っていることを理解できないようです。助けてください!^_^
編集:
ここに、私が何を意味するかを示す自己完結型の例を示します。
#include <iostream>
#include <vector>
class variable
{
public:
variable(int _type=0) : type(_type), value(NULL), on_pop(NULL)
{
}
~variable()
{
if (type)
{
std::cout << "Variable Deleted" <<std::endl;
on_pop(*this);
value=NULL;
}
}
int type;
void* value;
typedef void(*func1)(variable&);
func1 on_pop;
};
static void pop_int(variable& var)
{
delete (int*)var.value;
}
static void push_int(variable& var)
{
var.type = 1;
var.value = new int;
var.on_pop = &pop_int;
}
typedef void(*func1)(variable&);
func1 push = &push_int;
int main()
{
std::vector<variable> stack;
stack.push_back(variable(0));
push(stack[stack.size()-1]);
stack.push_back(variable(0));
push(stack[stack.size()-1]);
stack.push_back(variable(0));
push(stack[stack.size()-1]);
return 0;
}
上記のプログラムは、以下を出力します。
Variable Deleted
Variable Deleted
Variable Deleted
Variable Deleted
Variable Deleted
Variable Deleted
Process returned 0 (0x0) execution time : 0.602 s
Press any key to continue.