2015-04-28 17 views
6

Jest to część mojej klasy stosu. Działa dobrze w trybie flash, ale w cpp/windows metoda push nie zawsze działa. Nie rozumiem C++ na tyle dobrze, aby zrozumieć, dlaczego może to być niespójne.Tablica nie zmienia się, gdy metoda jest wstawiona

var arr:Array<T>; 
public var length(default, null):Int; 

public function new() { 
    clear(); 
} 

public inline function clear():Void { 
    arr = []; 
    length = 0; 
} 

public inline function push(t:T):Void { 
    // Log.trace(arr) -> [] 
    arr[length++] = t; 
    // Log.trace(arr) -> [] 
} 

Kiedy push jest inlined, coś stack.push(0) nie zawsze zmienić tablicę, jak jego prawdziwa długość jest ustalona na 0 (zmienna length robi wzrost, jednak). Innym razem działa dobrze. Jeśli usunę słowo kluczowe inline, będzie ono działało bez zarzutu.

Wygenerowany CPP gdy inlined (zastępując stack.push(0)):

::msg::utils::Stack tmp = this->stack; 
::msg::utils::Stack _this = tmp; 
Array<int> tmp1 = _this->arr; 
int tmp2 = (_this->length)++; 
tmp1[tmp2] = (int)0; 

A kiedy nie inlined (wewnątrz push()):

Dynamic tmp = this->arr; 
int tmp1 = (this->length)++; 
Dynamic tmp2 = t; 
hx::IndexRef((tmp).mPtr,tmp1) = tmp2; 

Czy coś mi brakuje, że C++ robi? Dlaczego zainicjowany kod działa przez większość czasu, ale nie działa w innym czasie?

Najnowsze haXe, hxcpp, openfl itp

+5

To nie wygląda na C++. Czy to jest CLI C++ czy coś takiego. –

+0

To naprawdę nie jest C++. –

+0

inline nie powinien nic robić. Czy używasz tego w środowisku z wątkami? Problemy z wątkami mogą pojawiać się jako niespójne zachowanie. – Jay

Odpowiedz

Powiązane problemy